- Lua 教程
- Lua - 首页
- Lua 基础
- Lua - 概述
- Lua - 环境
- Lua - 基本语法
- Lua - 注释
- Lua - 打印 Hello World
- Lua - 变量
- Lua - 数据类型
- Lua - 运算符
- Lua - 循环
- Lua - 决策
- Lua - 函数
- Lua - 日期和时间
- Lua 数组
- Lua - 数组
- Lua - 多维数组
- Lua - 数组长度
- Lua - 遍历数组
- Lua 迭代器
- Lua - 迭代器
- Lua 列表
- Lua - 在列表中搜索
- Lua 模块
- Lua - 模块
- Lua - 命名空间
- Lua 元表
- Lua - 元表
- Lua 协程
- Lua - 协程
- Lua 文件处理
- Lua - 文件 I/O
- Lua 库
- Lua - 标准库
- Lua - 数学库
- Lua - 操作系统功能
- Lua 有用资源
- Lua - 快速指南
- Lua - 有用资源
- Lua - 讨论
Lua - 模块
什么是模块?
模块就像一个库,可以使用require加载,并且具有包含表格的单个全局名称。此模块可以包含许多函数和变量。所有这些函数和变量都被封装到表格中,该表格充当命名空间。此外,行为良好的模块具有在 require 时返回此表格的必要规定。
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,文件名是 mymath.lua。文件内容如下:
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
现在,为了在另一个文件中(例如 moduletutorial.lua)访问此 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
需要记住的事项
将模块和运行的文件都放在同一个目录中。
模块名称及其文件名应相同。
最佳实践是为 require 函数返回模块,因此即使您可以在其他地方找到其他类型的实现,也最好如上所示实现模块。
实现模块的旧方法
现在让我以旧的方式重写同一个示例,该示例使用 package.seeall 类型的实现。这在 Lua 版本 5.1 和 5.0 中使用。mymath 模块如下所示。
mymath.lua
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
在 moduletutorial.lua 中使用模块如下所示。
moduletutorial.lua
require("mymath") mymath.add(10,20) mymath.sub(30,20) mymath.mul(10,20) mymath.div(30,20)
输出
当我们运行上述代码时,我们将获得相同的输出。但是建议不要使用旧版本的代码,并且假设它安全性较低。许多使用 Lua 进行编程的 SDK(如 Corona SDK)已弃用此用法。