加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua学习笔记六——package

发布时间:2020-12-14 22:25:36 所属栏目:大数据 来源:网络整理
导读:lua和其他语言一样,也有模块/包的概念,稍微有点不同的是,默认先从环境变量LUA_PATH中搜索lua文件,如果搜索不到,则从LUA_CPATH中搜索C文件。 ? ? 对于我来说,时而去改变环境变量,则显得麻烦,并且在另外的环境中部署时还要修改环境变量,则显得不人性

lua和其他语言一样,也有模块/包的概念,稍微有点不同的是,默认先从环境变量LUA_PATH中搜索lua文件,如果搜索不到,则从LUA_CPATH中搜索C文件。

?

?

对于我来说,时而去改变环境变量,则显得麻烦,并且在另外的环境中部署时还要修改环境变量,则显得不人性化,因此,觉得如下方式增加搜索路径比较好:

?

?

?

自定义包文件及包加载示例,假如文件结构如下:

蓝色表示文件夹,紫色表示文件

----------test.lua

----------demopackage

---------------------init.lua

---------------------a.lua

?

这时候,demopackage就是一个包了, 模块demopackage的功能由init.lua文件提供,模块demopackage.a由a.lua文件提供,下面将在test.lua文件中调用demopackage包:

?

--init.lua文件?

?

?

?

?

--a.lua

?

上面的两个文件中,开头都有这么一行代码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

?

?

?lua中,用require来加载包,如果想重命名加载的包,可以如下操作:

local t = require "demopackage", 这时候,就可以用t调用demopackage中的功能了。

?

BTW,lua加载包时,不会加载包中所有的模块,这点是跟其他语言不一样的,这样做应该是为了提高运行速度吧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读