开发学院

您的位置:首页>教程>正文

教程正文

Lua 模块

Lua 模块

  模块类似于一个可按需加载的封装库,模块可以包含许多函数和变量。所有这些函数和变量都封装在充当命名空间的表。

Lua模块的特点

  模块中的表的使用以多种方式帮助我们,并使我们能够与操作任何其他Lua表相同的方式操作来模块,用户可以以多种方式调用Lua中的函数。实例如下:

-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")

-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")

-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")

  在上面的示例代码中,您可以看到在Lua中有多么灵活的编程方式,没有任何特殊的附加代码。

require函数

  Lua提供了一个称为require高级函数,它可以简单地加载所有必要模块,。require函数只是假定模块作为一个代码块,它定义了一些实际上是函数或包含函数的表。

例子

  让我们看一个简单的例子,其中一个函数具有数学函数。让我们将此模块称为mymath.lua,文件内容如下所示:

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

  现在,为了在另一个文件中访问这个Lua模块,比如说moduletutorial.lua,您需要使用以下代码段:

mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)

  为了运行此代码,我们需要将两个Lua文件放在同一个目录中,或者,您可以将模块文件放在程序包路径中,它需要附加的设置。当我们运行上述程序时,我们将得到以下输出。

30
10
200
1.5

要记住的事

  将模块和文件都放在同一目录中运行。

  模块名称和文件名应该相同。

  最好的做法是返回需要函数的模块,因此最好实现模块,如上面所示,在其他地方可以找到其他类型的实现。

实现模块的旧方法

  现在让我用旧的方法重写一个例子,它使用package.seeall类型的实现。这在Lua5.1和5.0中使用。mymath模块如下所示:

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
  tutorial.lua中模块的使用情况如下所示:
require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)

  当我们运行上面的时候,我们将得到相同的输出。但是它被建议弃用的旧版本代码,它被认为不太安全。许多基于Lua的SDK如Corona SDK已不赞成使用这一点。