模块
从lua5.1开始,Lua 加入了标准的模块管理机制,Lua 的模块是由变量、函数等已知元素组成的 table,
因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。
一)模块定义
模块的文件名 和 模块定义引用名称要一致
-- 文件名为 model.lua
-- 定义一个名为 model 的模块
model = {}
-- 定义一个常量
model.constant = "这是一个常量"
-- 定义一个函数
function model.func1()
print("这是一个公有函数")
end
local function func2()
print("这是一个私有函数!")
end
function model.func3()
func2()
end
return model注意公有函数和私有函数的写法不同。
二)require 函数
Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了。例如:
执行 require 后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。
另一种写法,给加载的模块定义一个别名变量,方便调用
以上代码执行结果为:
如:模块定义的model,为local修饰为局部变量,那只能采用local m = require("model") 引用
意思是定义model时,model前加local定义,引用时也使用别名变量接收,这种方式才是常用的方式。
三)require 加载机制
我们使用require命令时,系统需要知道引入哪个路径下的model.lua文件。
require 用于搜索 Lua 文件的路径是存放在一个全局变量 package.path 中,
当 Lua 启动后,会以环境变量 LUA_PATH 的值来初始这个环境变量。 如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。
我们运行require("model");相当于把model替换上面的?号,lua就会在那些目录下面寻找model.lua如果找不到就报错。 所以我们就知道为什么会报错了。
那我们如何解决,我这里介绍常用的解决方案,编辑环境变量LUA_PATH 在当前用户根目录下打开 .profile 文件(没有则创建,打开 .bashrc 文件也可以), 例如把 "~/lua/" 路径加入 LUA_PATH 环境变量里:
文件路径以 ";" 号分隔,最后的 2 个 ";;" 表示新加的路径后面加上原来的默认路径。
接着,更新环境变量参数,使之立即生效。
这时假设 package.path 的值是:
那么调用 require("model") 时就会尝试打开以上文件目录去搜索目标。
Last updated
Was this helpful?