模塊 (Modules)

為了讓程式碼更容易維護,我們常會將關連的函式或資料一起放在一個獨立的 .lua 檔,這一個 lua 檔案就被稱為模塊 (Modules)。舉例來說,你可以在檔案 do-math.lua 建立一個與數學運算相關的模塊。

----------------
-- do-math.lua
----------------

local M = {}  -- Empty table; "M" can be any variable name you like, but most people use "M" for "module"

function M.addNumbers( number1, number2 )  --Add a function to the module
     return number1 + number2
end

return M

存取模塊時,必須使用 require(),接著便可以使用模塊內定義的功能,調用時不需指定 .lua 副檔名。

----------------
-- call-math.lua
----------------
local do_math = require( "do_math" )  -- Omit the .lua extension here
print( do_math.addNumbers( 10, 15 ) )  -- prints 25

模塊的運作原理其實很簡單,當第一次調用 require(),被 require 的檔案會被從頭被執行一次,以 do_math.lua 為例:第一次被調用時,會先建立一個表格 M,接著在 M 建立方法 addNumber,最後將 M 回傳。因此 call-math.lua 中的 do_math 變數就會是 do_math.lua 中的 M,也因此可以透過 do_math 變數調用 do_math.lua 中的方法。

必須特別注意的是:當再次調用 require() 引用相同模塊後,該模塊檔案就不會被執行了。那麼這時候 require() 會回傳什麼呢? 答案不是 nil,而是第一次調用該模塊時的回傳值。換句話說,模塊只要被加載一次,只要程式結束前都會一直存在在記憶體,不需要再重複加載。lua 這樣的行為可以增加程式運作的效率,但相對的會消耗較多的記憶體,也因此要記得移除程式中不再被使用的模塊。

results matching ""

    No results matching ""