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