Lua package
来源:互联网 发布:淘宝上的学历是真的吗 编辑:程序博客网 时间:2024/06/06 06:42
lua和其他语言一样,也有模块/包的概念,稍微有点不同的是,默认先从环境变量LUA_PATH中搜索 lua文件,如果搜索不到,则从LUA_CPATH中搜索C文件。
对于我来说,时而去改变环境变量,则显得麻烦,并且在另外的环境中部署时还要修改环境变量,则显得不人性化,因此,觉得如下方式增加搜索路径比较 好:
- local
p = "自定义包路径的父目录" - local
m_package_path = package.path - package.path
= string.format("%s;%s?.lua;%s?/init.lua", -
m_package_path, p, p)
自定义包文件及包加载示例,假如文件结构如下:
蓝色表示文件夹,紫色表示文件
----------test.lua
----------demopackage
---------------------init.lua
---------------------a.lua
这时候,demopackage就是一个包了, 模块demopackage的功能由init.lua文件提供,模块demopackage.a由a.lua文件提供,下面将在test.lua文件中调 用demopackage包:
--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
--a.lua
- module(...,
package.seeall) -
- function
p() -
print "module demopackage.a" - end
-
- function
lstostring(ls) -
return "{" .. ",table.concat(ls, " ).. "}" - end
上面的两个文件中,开头都有这么一行代码module(..., package.seeall),这是为了模块名以文件名命名,还有为了不污染全局变量_G,返回当前模块提供的函数等等。相当于:
--将模块名设置为文件名,且加载这个模块
local modname = ...
local M = {}
_G[modname] = M
package.loaded[modname] = M
--引入所需模块
local io = io
local print = print
setfenv(1, M)
--开始实现模块功能
function test()
end
……
调用demo文件
--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 inpairs(demopackage) do -
print(i, demopackage[i]) - end
-
- print("--------package:
demopackage.a )--------------" - for
i inpairs(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() )
local t = require "demopackage", 这时候,就可以用t调用demopackage中的功能了。
BTW,lua加载包时,不会加载包中所有的模块,这点是跟其他语言不一样的,这样做应该是为了提高运行速度吧。
- Lua package
- Lua package 使用
- Lua Package定义
- lua package匹配机制
- lua中的package.path和package.cpath
- lua modue、 require、 package 区别
- Lua中的require package.path
- LUA modue require package 区别
- LUA modue require package 区别
- Lua学习笔记六——package
- Lua学习笔记六——package
- 【Lua】模块(module)和包(package)详解
- Lua学习笔记六——package
- Lua学习笔记六——package
- [Lua基础]包package——模块开发
- Lua中的模块(module)和包(package)详解
- lua关于require和package.loaded 之间的关系
- Lua中的模块(module)和包(package)详解
- apk安装法之二----一段Android实现应用下载并自动安装apk包的代码
- POJ 1679 The Unique MST
- C语言关于结构体做参数传递
- jQuery学习笔记之十二-----Ajax
- FIQ和IRQ区别
- Lua package
- 【索引】Volume 0. Getting Started
- C#泛型与委托:一个简单的数组模板示例
- PHP工作模型与运行机制
- mybatis学习笔记--常见的问题
- scanf含有非输入控制符
- 数组深入学习
- Python批量裁切影像
- linux 忘记root密码的补救