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







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章