requirXe()

类型 功能
package
返回值
修订版 版本 2024.3703
关键字 module、require
另请参阅 package.loaded

概述

加载指定模块。

此函数首先查看 package.loaded 表格以确定是否已加载 modname。如果加载,require() 会返回存储在 package.loaded[modname] 中的值。否则,它将尝试查找模块加载器。

要查找加载器,require()package.loaders 数组进行指导。通过更改此数组,可以更改 require() 查找模块的方式。下文的解释基于 package.loaders 的默认配置。

首先,require() 会查询 package.preload[modname]。如果它有值,则此值(应为一个函数)即为该加载器。否则,require() 会使用存储在 package.path 中的路径搜索 Lua 加载器。如果这样也失败,则会尝试万能加载器(请参见 package.loaders)。

找到加载器后,require() 会使用 modname 的一个参数调用加载器。如果加载器返回任何值,则 require() 会将返回值分配给 package.loaded[modname]。如果加载器未返回任何值并且未将任何值分配给 package.loaded[modname],则 require() 会将 true 分配给此条目。无论如何,require() 都会返回 package.loaded[modname] 的最终值。

如果加载或运行模块时出现任何错误,或如果找不到模块加载器,则 require() 会发出错误信号。

模拟器与设备

您的代码在模拟器中运行还是在设备上运行,这在行为上存在至关重要的差异。这些差异是由于文件系统行为中存在的 OS 基本差异造成的。

在许多系统中,OS 文件系统区分大小写。因此,即使实际文件名和传递给 require() 的 Lua 字符串具有不同的大小写,模块也依然会正确加载。然而,在设备上,文件名通常区分大小写。在这种情况下,如果实际文件名和 Lua 字符串的大小写不匹配,则模块将无法加载。

命名限制

禁止字符

module 字符串不能包含任何 . 字符,但指定子目录时除外(仅限 iOS)。例如,下面代码将从 foo 子目录加载 bar.lua 文件

local fooBar = require( "foo.bar" )

保留的名称

在 iOS 上,不能将子目录命名为 resources,否则在构建时将遇到代码签名错误。在 Android 上不会出现此问题,但最好避免使用此目录名。

语法

local name = require( "moduleName" )
local name = require "moduleName"
moduleName (必需)

String要加载的模块的名称。不要.lua 扩展名附加到此字符串。

示例

-- Require the physics library and assign it to the local variable "physics"
local physics = require( "physics" )