1897

9 分钟

#Lua 的 require 函数

require (modname)

说明

加载指定模块。

首先检查 package.loaded,判断模块是否已经被加载:

  • 如果已经被加载,则返回 package.loaded[modname] 保存的值
  • 否则,尝试查找该模块的 加载器

该函数根据数组 package.searchers 里的 查找器函数 依次查找加载器:

  1. 第一个查找器尝试从 package.preload 中查找加载器 package.preload[modname]
  2. 第二个查找器尝试从 package.path 中查找 Lua 库形式的加载器
  3. 第三个查找器尝试从 package.cpath 中查找 C 库形式的加载器
    • require("mylibs") 尝试加载 mylibs.so 中的 luaopen_mylibs 函数
  4. 第四个查找器尝试使用一体化加载器(多个子模块集成在一个 C 库中):从 package.cpath 中查找 C 库形式的加载器
    • require("mylibs.xx") 尝试加载 mylibs.so 中的 luaopen_mylibs_xx 函数
    • require("mylibs.yy") 尝试加载 mylibs.so 中的 luaopen_mylibs_yy 函数
    • require("mylibs.zz") 尝试加载 mylibs.so 中的 luaopen_mylibs_zz 函数

开始

package.loaded[modname] 是否存在?

1.返回 package.loaded[modname]

结束

package.searchers

package.preload[modname] 是否存在?

2.尝试调用 package.preload[modname]

package.path 中是否包含 Lua 库形式的加载器?

3.尝试调用 modname.lua

package.cpath 中是否包含 C 库形式的加载器?

4.尝试调用 modname.so 中的 luaopen_modname

参数

  • modname - 要加载的模块名

返回值

  • 返回模块的返回值

#示例

print("预加载:") for k, v in pairs(package.preload) do print(k, v) end print("\nLua 库:", package.path) print("\nC 库:", package.cpath)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#关联文档

#推荐阅读

创建于 2025/10/30

更新于 2025/10/30