Lua(十三)——模块与包
发布日期:2021-06-30 19:59:02
浏览次数:4
分类:技术文章
本文共 967 字,大约阅读时间需要 3 分钟。
Lua中的模块就是一个封装库,类似于C#的命名空间,可以把公有的变量和方法放在一个文件中,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度
一:模块的定义
两种定义模块中函数的形式,可以用匿名函数定义也可以用普通函数定义
二:模块的使用(require)
我个人理解引入模块就是引入一个类,引入这个模块(类)之后就可以使用这个模块(类)中的全局变量和全局函数
例如在一个文件名为moduletext的lua文件中引入模块的文件名不区分大小写引入模块时还可以用一个变量去接收,这个变量相当于是引入模块中的返回值
使用此方法时,模块文件的模块名与返回值必须一致
三:模块的加载机制
对于自定义的模块,模块文件不是放在哪个文件目录都行,函数require有它自己的文件路径加载策略,它会尝试从Lua文件或C程序库中加载模块。require用于搜索Lua文件的路径是存放在全局变量package.path中,当Lua启动后,会以环境变量LUA_PATH的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。当然,如果没有LUA_PATH这个环境变量,也可以自定义设置。
四:包
Lua中包指的是C包,就是用C语言编写的包,可以引入C语言编写的扩展包对Lua进行扩展
与Lua中写包不同,C包在使用以前必须首先加载并连接,在大多数系统中最容易的实现方式是通过动态连接库机制。Lua在一个叫loadlib的函数内提供了所有的动态连接的功能。这个函数有两个参数:库的绝对路径和初始化函数。所以典型的调用的例子如下:
loadlib函数加载指定的库并且连接到Lua,然而它并不打开库(也就是说没有调用初始化函数),反之他返回初始化函数作为Lua的一个函数,这样我们就可以直接在Lua中调用他。如果加载动态库或者查找初始化函数时出错,loadlib将返回nil和错误信息。我们可以修改前面一段代码,使其检测错误然后调用初始化函数: 一般情况下我们期望二进制的发布库包含一个与前面代码段相似的stub文件,安装二进制库的时候可以随便放在某个目录,只需要修改stub文件对应二进制库的实际路径即可。将stub文件所在的目录加入到LUA_PATH,这样设定后就可以使用require函数加载C库了。转载地址:https://liuhaowen.blog.csdn.net/article/details/89010633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月05日 17时33分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Golang 逃逸分析
2019-04-30
golang实现大数据量文件的排序
2019-04-30
golang中的time包
2019-04-30
golang fmt包中的占位符
2019-04-30
Docker下使用Redis
2019-04-30
Redis的主从和集群设置
2019-04-30
对Redis Cluster的理解
2019-04-30
清华师哥丢了个在Github下载量50万+的项目给我,让(附源码下载地址)
2019-04-30
The MASM32 SDK version 10 发布了!
2019-04-30
发布软件:TreeInfo(分层信息管理器)
2019-04-30
c++二分图的最大匹配
2019-04-30
c++点的距离
2019-04-30
c++实现彩色炫酷(?)画面
2019-04-30
c++马拦过河卒
2019-04-30
2019NOIP D4题 加工领奖
2019-04-30
1997年世界黑客大赛获奖作品
2019-04-30
论DEV-C++怎样才能做窗口
2019-04-30
Failed to connect to github.com port 443: Operation timed out和弹出无法打开"GoogleSoftwareUpdate.bundle"
2019-04-30
2021.5.19 JS高级第二天
2019-04-30
2021.5.20 JS高级第三天
2019-04-30