LUA require 搜索路径指定方法 和 package
来源:互联网 发布:广州seo外包服务 编辑:程序博客网 时间:2024/04/29 17:57
如果是一个 *.LUA 的文件, 里面用到了自己写的库, 或者第三方写的库, 但是你不想把它放到 lua 的安装目录里, 则在代码里面可以指定require搜索的路径。
package.path = '/usr/local/share/lua/5.1/?.lua;/home/resty/?.lua;' --搜索lua模块
package.cpath = '/usr/local/lib/lua/5.1/?.so;' --搜索so模块
如果是要在 nginx.conf 文件中引用第三方的库,则需要在 http 段中添加下面的代码
lua_package_path '/usr/local/share/lua/5.1/?.lua;/home/resty/?.lua;';
lua_package_cpath '/usr/local/lib/lua/5.1/?.so;';
上文来自:http://blog.csdn.net/langeldep/article/details/8289199
lua和其他语言一样,也有模块/包的概念,稍微有点不同的是,默认先从环境变量LUA_PATH中搜索lua文件,如果搜索不到,则从LUA_CPATH中搜索C文件。
对于我来说,时而去改变环境变量,则显得麻烦,并且在另外的环境中部署时还要修改环境变量,则显得不人性化,因此,觉得如下方式增加搜索路径比较好:
- --将自定义包路径加入package的搜索路径中。也可以加到环境变量LUA_PATH中
- 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()
print("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 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中的功能了。
BTW,lua加载包时,不会加载包中所有的模块,这点是跟其他语言不一样的,这样做应该是为了提高运行速度吧。
上文来自:http://blog.csdn.net/hong201/article/details/4163378- LUA require 搜索路径指定方法 和 package
- LUA require 搜索路径指定方法
- LUA require 搜索路径指定方法
- LUA require 搜索路径指定方法
- LUA require 搜索路径指定方法
- lua require 搜索路径
- Lua:下载安装lua-cjson,lua操作json代码,指定require搜索路径
- lua关于require和package.loaded 之间的关系
- lua modue、 require、 package 区别
- Lua中的require package.path
- LUA modue require package 区别
- LUA modue require package 区别
- Lua require 相对路径
- lua关于require和package.loaded常被忽略的故事
- lua关于require和package.loaded常被忽略的故事
- lua关于require和package.loaded常被忽略的故事
- lua关于require和package.loaded常被忽略的故事
- lua require载入父目录路径
- eclipse|studio 导出hprof 后用MAT显示报错Unknown HPROF Version
- redis.conf详解
- Hive做数据仓库,对Hadoop Hive 的多用户的资源分配和权限管理 (Hortonworks HDP2.2 hadoop 2.6)
- STL(1)---从对->运算符的重载到灵巧指针再到迭代器
- Kafka: 大数据处理的利器
- LUA require 搜索路径指定方法 和 package
- HDU5326.Work
- git入门资料整理
- 苹果个人开发者账号如何升级成公司账号
- 推荐几个很好的编程在线测试平台 online judge
- UVa 11988 悲剧文本 采用链表
- java - (01) JDK, JRE, JVM
- OpenGTS安装
- Bash编程-调试