require "mod"
mod.foo()
-------------------
local m=require "mod"
m.foo()
--------------------
package.preload --预先加载的库表
找不到找:
loadfile
loadlib
function require(name)
if not package.loaded[name] then --模块是否加载
local loader = findloader(name) --返回加载器
if loader==nil then
error("unable to load module "...name)
end
package.loaded[name]=true --将模块标记已加载,防止递归。
local res=loader(name)
if res ~= nil then
package.loaded[name]=res
end
end
return package.loaded[name]
end
require "foo"
package.loaded["foo"] = nil
require "foo" --可以再次加载
查找路径:
package.path
package.cpath
luaopen_<模块名>
--------------
local M={}
complex=M
function M.new()
end
return complex
-----------------------
local modname="xxx"
local M={}
_G[modname]=M
package.loaded[modname]=M --不需要return
-----------------------
local modname=complex
local M={}
_G[modname]=M
package.loaded[modname]=M
setmetatable(M,{__index=_G})
setfenv(1,M)
function add(c1,c2) ----因为setfenv 可以省略前缀
return new(c1,c2)
end
complex.math.sin(x) --继承_G
----------
local modnam="xxx"
local M={}
_G[modname]=M
package.loaded[modname]=M
local sqrt = math.sqrt ---要用的函数导出来
local io=io
setfenv(1,M)
-----------
module(modname,package.seeall) --相当于setmetatable(M,{__index=_G})
mod.sub --会查询package.loaded package.preload
require "a.b" --子模块
./?.lua;/usr/local/lua/?/init.lua
./a/b.lua
/usr/local/lua/a/b/init.lua