lua require 搜尋路徑
lua引用第三方庫時,設定搜尋路徑
package.path = '/usr/local/share/lua/5.1/?.lua;/home/resty/?/init.lua;' --搜尋lua模組
package.cpath = '/usr/local/lib/lua/5.1/?.so;' --搜尋so模組
也可通過設定 LUA_PATH和 LUA_CPATH 兩個變數來確定搜尋路徑 export LUA_PATH=”/usr/local/share/lua/5.1/?.lua;/home/resty/?/init.lua;“
require說明:
1、lua庫若是沒有顯式的返回任何值(末尾沒有return),則預設是返回true
local rr = require “noreturn” -- rr 等於 true
2、模組名中有點.時,在搜尋時,替換為斜槓/
package.path
= '/home/resty/?/init.lua;'
local rr = require “level1.level2” -- 搜尋/home/resty/level1/level2/init.lua
3、庫返回的值會被放在package.loaded[modname]中
package.path = '/home/resty/?/init.lua;'
local rr = require “level1.level2” -- package.loaded[“level1.level2”
4、對於C庫,若是模組名含點和橫槓,則庫內的載入器(luaopen_*函式)名字構成:luaopen_
加上 去掉第一個橫槓“-”前的字首並且所有的點都替換為下劃線的模組名
package.cpath = '/home/resty/?/init.so;'
local rr = require “level1.level2-a.b.c” -- luaopen_*函式便是 luaopen_a_b_c
5、若package.path 和package.cpath均未找到要載入的庫,則啟用all-in-one模式,
只針對c庫,將會尋找以模組名的根名為名字的C庫
例:
a.b.c 根名便是a
local
rr = require “a.b.c” -- 會在a.so 中找載入器luaopen_a_b_c
例::
*/mod/ini.lua
return 199
--------------------------------------------------------
*/mod/aa.lua
local sy = {}
function sy.aa()
print("aa")
end
print("once")
return sy
----------------------------------------------------------
*/test/testit.lua
package.path="../?.lua;../?/ini.lua"
local rr = require "mod"
local tt = require "mod.aa"
print(mod) -- nil
print(rr) -- 199
tt.aa() -- aa
print(package.loaded['mod.aa']) -- table address
print(package.loaded["mod"]) -- 199
print(package.loaded["math"]) -- table address
----------------------------------------------------------
run result:
once
nil
199 -- 沒有返回值則為true
aa
table: 0x828e260
199 -- 沒有返回值則為true
table: 0x8290f68