类型 功能 库 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 加载器。如果这样也失败,则会尝试
找到加载器后,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"
String。要加载的模块的名称。不要将 .lua
扩展名附加到此字符串。
-- Require the physics library and assign it to the local variable "physics" local physics = require( "physics" )