Lua知识点_基础_package

来源:互联网 发布:文本语音朗读软件 编辑:程序博客网 时间:2024/04/28 12:55


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加载包时,不会加载包中所有的模块,这点是跟其他语言不一样的,这样做应该是为了提高运行速度吧。
0 0