Lua从5.1开始加入了标准的模块管理机制,可以把一些公用代码放在一个文件里,以API接口的形式在其他地方调用。

创建包

  1. -- 文件名 module.lua
  2. -- 定义一个名为module的模块
  3. module = {}
  4. -- 定义一个常量
  5. module.constant = "这是一个常量"
  6. -- 定义一个函数
  7. function module.fun1()
  8. print("这是一个公共函数")
  9. end
  10. local function func2()
  11. print("这是一个私有函数")
  12. end
  13. function module.func3()
  14. func2()
  15. end
  16. return module

引入/使用包

使用require来引入、加载包
require "模块名"

  1. require "module"
  2. print(module.constant)
  3. module.fun3()
  4. -- 给包名定义别名
  5. local m = require "module"
  6. print(m.constant)

包的载入机制

require 用于搜索 Lua 文件的路径是存放在全局变量 package.path 中,当 Lua 启动后,会以环境变量 LUA_PATH 的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。
当然,如果没有 LUA_PATH 这个环境变量,也可以自定义设置,在当前用户根目录下打开 .profile 文件(没有则创建,打开 .bashrc 文件也可以),例如把 “~/lua/“ 路径加入 LUA_PATH 环境变量里:

  1. $ export LUA_PATH="/usr/local/lua/module/?.lua;;"
  2. $ source ~/.bashrc

文件路径以 “;” 号分隔,最后的 2 个 “;;” 表示新加的路径后面加上原来的默认路径。
假设LUA_PATH的值为:/usr/local/lua/module/?.lua;./?.lua
此时Lua查找包的顺序为:

  1. /usr/local/lua/module/module.lua
  2. ./module.lua