国际访客建议访问 Primers 编程伙伴 国际版站点 > Lua 教程 > require 以获得更好的体验。

# Lua 的 require 函数

请查看 Lua 标准库函数列表 了解更多相关 API。
require (modname)

!subtitle:说明

加载指定模块。

首先检查 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 函数

graph TB
    START([开始]) --> COND1{"package.loaded[modname] 是否存在?"} -- 是 --> R1["1.返回 package.loaded[modname]"] --> END([结束])
    COND1 -- 否 --> package.searchers --> COND2{"package.preload[modname] 是否存在?"} -- 是 --> R2["2.尝试调用 package.preload[modname]"] --> END
    COND2 -- 否 --> COND3{"package.path 中是否包含 Lua 库形式的加载器?"} -- 是 --> R3["3.尝试调用 modname.lua"] --> END
    COND3 -- 否 --> COND4{"package.cpath 中是否包含 C 库形式的加载器?"} -- 是 --> R4["4.尝试调用 modname.so 中的 luaopen_modname"] --> END

!subtitle:参数

  • modname - 要加载的模块名

!subtitle:返回值

  • 返回模块的返回值

# 示例

运行示例

print("预加载:")
for k, v in pairs(package.preload) do
    print(k, v)
end

print("\nLua 库:", package.path)
print("\nC 库:", package.cpath)

# 关联文档

# 推荐阅读

本文 更新于: 2025-11-27 09:38:12 创建于: 2025-11-27 09:38:12