Lua模块
Lua 模块
什么是模块?
Lua 中的模块与库的概念相似,每个模块都有一个全局唯一名字,并且每个模块都包含一个表。使用一个模块时,可以使用 require 加载模块。模块中可以包括函数和变量,所有这些函数和变量被表存储于模块的表中。模块中的表的功能类似于命名空间,用于隔离不同模块中的相同的变量名。在使用模块的时候,我们应该遵守模块定义的规范,在 require 加载模块时返回模块中的包含函数和变量的表对象。
Lua 模块的特别之处
模块中表的使用使得我们可在绝大多数情况下可以像操作其它表一样操作模块。由于 Lua 语言允许对模块本身进行操作,所以 Lua 也就具备了许多其它语言需要特殊机制才能实现的特殊性质。例如,这种自由的表操作机制使得编程人员可以用多种方法调用模块中的函数。下面的例子演示了其中的一些方法:
1 | -- 假设我们有一个板块 printFormatter |
local mymath = {}
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
return mymath
1 |
|
mymathmodule = require(“mymath”)
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)
1 |
|
30
10
200
1.5
1 |
|
module(“mymath”, package.seeall)
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
1 |
|
require(“mymath”)
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)
当我们运行这段代码,我们会得到与前面相同的输出结果。但是建议你不要使用这种方式,因为普遍认为这种方式不及新的方法安全。许多用到 Lua 语言的 SDK 都已经不再使用这种方式定义模块,例如, Corna SDK。