Lua dofile loadfile loadstring 區別,loadfileloadstring

來源:互聯網
上載者:User

Lua dofile loadfile loadstring 區別,loadfileloadstring

dofile,把它當作 Lua 運行代碼的 chunk 的一種原始的操作。


1. dofile 實際上是一個輔助的函數。真正完成功能的函數是 loadfile;


2.與 dofile 不同的是 loadfile 編譯代碼成中間碼並且返回編譯後的 chunk 作為一個函數,而不執行代碼;






3. loadfile 不會拋出錯誤資訊而是返回錯誤碼。



將TestMain中的Print.lua改成otherPrint.lua(該lua檔案不存在),結果如上,loadfile返回錯誤碼和錯誤資訊,dofile卻拋出異常了,所以沒有列印出----------B-----------


4.loadfile只需要編譯一次,可以多次運行;dofile卻要每次都編譯(適用於完成比較簡單的功能)。



   根據以上四條,對於loadfile,我們可以認為是這樣定義的:

  


  Lua 把每一個 chunk 都作為一個匿名函數處理:

  假如我們有一個檔案 foo.lua: 


 

   當我們執行命令 f = loadfile("foo.lua")後,foo 被編譯了但還沒有被定義,如果要定 義他必須運行 chunk: 



loadstring 與 loadfile 相似,只不過它不是從檔案裡讀入 chunk,而是從一個串中讀入;

loadstring 編譯的時候不關心詞法範圍:


這個例子中,和想象的一樣 g 使用局部變數 i,然而 f 使用全域變數 i;loadstring 總 是在全域環境中編譯他的串。 








Lua loadfile函數問題

loadfile 只會在你指定的路徑下搜尋。如果不是絕對路徑,那就是相對與目前的目錄的相對路徑。

require 會根據package.path 搜尋。
 
lua進,對於lua裡設定檔案路徑的問題

呃,lua文法裡是沒有這幾種介面的,系統給出的載入模組或者chunk的介面只有require,dofile,loadfile,loadstring等等,你給出的這幾個很明顯是自己封裝的介面,要看裡面的作用就要自己去看代碼了;不過看函數字面意思其實也比較明晰了吧,載入角色資料,載入設定檔,載入資源?
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.