lua中的require函式

2021-07-08 16:06:06 字數 1175 閱讀 6338

lua提供高階的require函式來載入執行庫,lua中的require函式功能主要有:

1、require函式會搜尋目錄載入檔案

2、require會判斷是否檔案已經載入避免重複載入同一檔案。

由於上述特徵,require在lua中是載入庫的更好的函式。require使用的路徑和普通我們看到的路徑還有些區別,我們一般見到的路徑都是乙個目錄列表。require的路徑是乙個模式列表,每乙個模式指明一種由虛檔名(require的引數)轉成實檔名的方法。更明確地說,每乙個模式是乙個包含可選的問號的檔名。匹配的時候lua會首先將問號用虛檔名替換,然後看是否有這樣的檔案存在。如果不存在繼續用同樣的方法用第二個模式匹配。

為了確定路徑,lua首先檢查

全域性變數lua_path是否為乙個字串,如果是則認為這個串就是路徑;否則require檢查

環境變數lua_path的值,如果兩個都失敗require使用固定的路徑(典型的"?;?.lua")

require的另乙個功能是避免重複載入同乙個檔案兩次。lua保留一張所有已經載入的檔案的列表(使用table儲存)。如果乙個載入的檔案在表中存在require簡單的返回;表中保留載入的檔案的虛名,而不是實檔名。所以如果你使用不同的虛檔名require同乙個檔案兩次,將會載入兩次該檔案。比如require "foo"和require "foo.lua",路徑為"?;?.lua"將會載入foo.lua兩次。我們也可以通過

全域性變數_loaded訪問檔名列表,這樣我們就可以判斷檔案是否被載入過;同樣我們也可以使用一點小技巧讓require載入乙個檔案兩次。比如,require "foo"之後_loaded["foo"]將不為nil,我們可以將其賦值為nil,require "foo.lua"將會再次載入該檔案。乙個路徑中的模式也可以不包含問號而只是乙個固定的路徑。

這種情況下,require沒有匹配的時候就會使用這個固定的檔案(當然這個固定的路徑必須放在模式列表的最後才有意義)。在require執行乙個chunk以前,它定義了乙個

全域性變數_requiredname用來儲存被required的虛檔案的檔名。我們可以通過使用這個技巧擴充套件require的功能。

舉個極端的例子,我們可以把路徑設為"/usr/local/lua/newrequire.lua",這樣以後每次呼叫require都會執行newrequire.lua,這種情況下可以通過使用_requiredname的值去實際載入required的檔案。

lua中的require機制

lua中的require機制 2008 06 05 09 13 27 分類 python ruby lua中的require機制 為了方便 管理,通常會把lua 分成不同的模組,然後在通過require函式把它們載入進來。現在看看lua的require的處理流程。1 require機制相關的資料和函...

lua中的require機制

lua中的require機制 為了方便 管理,通常會把lua 分成不同的模組,然後在通過require函式把它們載入進來。現在看看lua的require的處理流程。1 require機制相關的資料和函式 package.path 儲存載入外部模組 lua中 模組 和 檔案 這兩個概念的分界比較含糊,...

LUA教程require函式 30

lua提供高階的require函式來載入執行庫。粗略的說require和dofile完成同樣的功能但有兩點不同 1.require會搜尋目錄載入檔案 2.require會判斷是否檔案已經載入避免重複載入同一檔案。由於上述特徵,require在lua中是載入庫的更好的函式。require使用的路徑和普...