2015-12-12 70 views

回答

9

在Lua標準庫中沒有import函數。不適用於5.1,5.2或5.3。也許你正在考慮提供這種功能的其他代碼;你必須向該功能的提供者詢問它。

require不加載.lua文件;它加載模塊。究竟是什麼require做的是defined by package.loaders在5.1或package.searchers在5.2/3。一個特定的模塊可能被實現爲.lua文件,但它也可能是.dll/.so。或者,如果模塊是應用程序內部的,則它可能是在編譯時間表中查找的名稱。或者它可以從互聯網上下載一些東西。或者任何東西,根據什麼loaders/searchers做。

默認loaders/searchers可以加載.lua文件,但它們只能通過基於Lua搜索路徑的目錄進行搜索。此路徑由環境變量初始化,但用戶可以覆蓋它。

模塊命名約定也有一些子模塊的概念。你幾乎從不把「.lua」放在模塊名稱中。 require加載模塊,而不是文件;加載的任何文件都是加載模塊的副作用。

哦,和require緩存加載模塊。使用相同的模塊名稱再次調用它將簡單地返回先前加載的模塊。如果你想重新加載一個模塊......你不能。似乎沒有辦法強制模塊重新加載。

loadfile從磁盤加載文件並將其編譯爲Lua塊。它使用C標準庫工具來進行文件加載,因此路徑的工作與Lua編譯的C庫實現一致。它返回加載的塊但不執行它。

+3

我會補充說,只需要加載一個模塊一次,然後再調用時再次請求相同的參數,它會返回模塊的返回值(例如來自lua文件的返回值)或true。 loadfile改爲總是運行該文件。 – Rochet2

+2

另外,'require'運行模塊一次。 'loadfile'不運行該文件。 – lhf

相關問題