概述
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下:
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
io.write("这是一个公有函数!n")
end
local function func2()
print("这是一个私有函数!")
end
function module.func3()
func2()
end
return module
1.require 函数
Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了。例如:
require("<模块名>")
或者
require "<模块名>"
执行 require 后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。
require("module")
print(module.constant)
module.func3()
以上代码执行结果为:
这是一个常量 这是一个私有函数!
--1: 第一个代码是有lua虚拟机第一个解释执行的lua文件;
--2:第一个lua文件可以去包含和导入其他的lua文件;
使用require关键字来导入其他lua
--3: require的时候就会装载lua文件,并执行lua代码;
require“./test” // 不用文件的后缀名;
require “文件夹/lua文件名”;
require “文件夹.lua文件名”;
--4: lua代码中的 return 语句:
require “lua代码” 执行的时候如果有return 语句,那么require就返回return的对象;
--5: lua导出函数:
将lua代码要到处的函数,做成一个表,把这个表返回出去;
--6: 如果在其他的地方使用又要装载一次;
--7: 如果require过了的lua代码,直接返回返回值,不再装载代码并执行;
2.module与package
--1: 默认情况下lua代码编写的函数是不能被外部识别的;
--2: 包: module(包名, package.seeall)
--3: 外部require 包名
require “包名”
--4: 全局require模块后,其他的lua文件无需再去require了,方便使用;
3.C 包
Lua和C是很容易结合的,使用 C 为 Lua 写包。
与Lua中写包不同,C包在使用以前必须首先加载并连接,在大多数系统中最容易的实现方式是通过动态连接库机制。
Lua在一个叫loadlib的函数内提供了所有的动态连接的功能。这个函数有两个参数:库的绝对路径和初始化函数。所以典型的调用的例子如下:
local path = "/usr/local/lua/lib/libluasocket.so"
local f = loadlib(path, "luaopen_socket")
loadlib 函数加载指定的库并且连接到 Lua,然而它并不打开库(也就是说没有调用初始化函数),反之他返回初始化函数作为 Lua 的一个函数,这样我们就可以直接在Lua中调用他。
如果加载动态库或者查找初始化函数时出错,loadlib 将返回 nil 和错误信息。我们可以修改前面一段代码,使其检测错误然后调用初始化函数:
local path = "/usr/local/lua/lib/libluasocket.so"
-- 或者 path = "C:\windows\luasocket.dll",这是 Window 平台下
local f = assert(loadlib(path, "luaopen_socket"))
f() -- 真正打开库
一般情况下我们期望二进制的发布库包含一个与前面代码段相似的 stub 文件,安装二进制库的时候可以随便放在某个目录,只需要修改 stub 文件对应二进制库的实际路径即可。
将 stub 文件所在的目录加入到 LUA_PATH,这样设定后就可以使用 require 函数加载 C 库了。
最后
以上就是甜美乌冬面为你收集整理的<6>Lua require模块与包的全部内容,希望文章能够帮你解决<6>Lua require模块与包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复