Lua(十三)——模块与包

一:模块

Lua中的模块就是一个封装库,可以把公有的变量和方法放在一个文件中,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。

1.模块的定义

两种定义模块中函数的形式,可以用匿名函数定义也可以用普通函数定义:


2.模块的使用(require)

我个人理解引入模块就是引入一个类,引入这个模块(类)之后就可以使用这个模块(类)中的全局变量和全局函数
require后的文件名不区分大小写

     

引入模块时可以用一个变量去接收,这个变量相当于是引入模块中的返回值


3.模块的加载机制

对于自定义的模块,模块文件不是放在哪个文件目录都行,函数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库了。

猜你喜欢

转载自blog.csdn.net/LLLLL__/article/details/89010633