1.概述
package的功能类似c++的namespace,它其实是一个文件夹名字,在这个文件夹下有不同的lua脚本,
你可以通过package的名字作为前缀去使用其包含的lua脚本中的函数。
2.实例
src--
--test.lua
--demopackage
--init.lua
--a.lua
这时候,demopackage就是一个包了,模块demopackage的功能由init.lua文件提供,模块demopackage.a
由a.lua文件提供,下面将在test.lua文件中调用demopackage包。
(1)
init.lua---------------
module(..., package.seeall)
function add(n1, n2)
return n1 + n2
end
function sub(n1, n2)
return n1 - n2
end
function div(n1, n2)
if n2 ~= 0 then
return n1 / n2
else
error("require n2 is not zero")
end
end
function mul(n1, n2)
return n1 * n2
end
(2)
a.lua---------------
module(..., package.seeall)
function p()
print "module demopackage.a"
end
function lstostring(ls)
return "{" .. table.concat(ls, ", ") .. "}"
end
(3)
test.lua-----------------
--将自定义包路径加入package的搜索路径中。也可以加到环境变量LUA_PATH中
local p = "E:/dep/code/lua/"
local m_package_path = package.path
package.path = string.format("%s;%s?.lua;%s?/init.lua", m_package_path, p, p)
--print(package.path) --> lua文件的搜索路径
--print(package.cpath) --> lua c文件的搜索路径
require "demopackage"
require "demopackage.a"
print("--------package: demopackage --------------")
for i in pairs(demopackage) do
print(i, demopackage[i])
end
print("--------package: demopackage.a --------------")
for i in pairs(demopackage.a) do
print(i, demopackage.a[i])
end
print("---------------demo print--------------")
print( demopackage.add(1, 2) )
print( demopackage.a.lstostring({"first", "second"}) )
print( demopackage.a.p() )
注意:
lua中,用require来加载包,如果想重命名加载的包,可以如下操作:
local t = require "demopackage", 这时候,就可以用t调用demopackage中的功能了。
lua加载包时,不会加载包中所有的模块,这点是跟其他语言不一样的,这样做应该是为了提高运行速度吧。