Lua 中提供了模塊的概念,模塊類似一個封裝庫或者 C++ 中的一個類,可以將公用的部分提到一個文件中,以 API 的形式供其他 lua 文件調用。
Lua 中的模塊其實就是包含變量、函數等已知元素組成的 table, 本質上是一個 table。
一、模塊的聲明
創建一個名稱為 LearnModule.lua 的文件,並在此文件中實現下列代碼:
-- 定義一個名為ModuleT的模塊,模塊的本質就是一個table,內部包含變量和函數等 ModuleT = {} -- 定義一個變量 ModuleT.constant = '這是一個常量' -- 定義一個 function ModuleT.Fun1( ) print('這是一個公有函數') end local function Fun2() print('這是一個私有函數') end function ModuleT.Fun3( ) Fun2() end return ModuleT
二、在其他 lua 文件中使用 ModuleT 模塊
1. 首先創建另外一個 lua 文件,例如命名為 TestModule.lua。
2. 通過 require 函數加載包含 ModuleT 模塊的文件,代碼如下:
require("LearnModule") print(ModuleT.constant) print(ModuleT.Fun1)
3. 打印結果為:
----learn to how to make module-----
這是一個常量 function: 0x7fa350604660
三、require 函數使用說明
- require 函數的使用
-- name 表示定義的Module 所在的 lua 文件
require("<name>")
- 找不到 name 對應的文件
第一次使用 require 函數加載指定模塊的文件時,可能提示找不到對應的文件,原因在於 Lua 有一個默認的查找路徑。通過 package.path 和 package.cpath 查找路徑。
-- 打印出當前默認搜索的動態庫(so)路徑
print(package.cpath) -- 打印當前默認的用於搜索.lua文件的路徑
print(package.path)
package.cpath:代表默認的 so 庫的查找路徑。
package.path:代表默認的 lua 文件的查找路徑。
如果通過 require 函數加載指定的模塊文件時,提示找不到對應的文件,則通過設置 package.path 路徑即可。具體代碼如下:
package.path = package.path..";/Users/momo/Documents/workspace_lua/?.lua"
print(package.path)
上述代碼表示將 package.path 的路徑追加上 「/Users/momo/Documents/workspace_lua/」 路徑下的所有 lua 文件,讀者可根據自己的實際情況添加對應的路徑。
以上親測有效。