编写模块时,文件在全局环境中运行,而不是在调用环境中运行:
-- other_file.lua
require('my_file')
-- my_file.lua
getfenv(2) == getfenv(0) -- true
setfenv(1, {}) -- or module(...)
getfenv(2) == getfenv(0) -- true
我永远不记得读过这个。是在任何地方提到/记录的吗?
(这个问题更多地是关于require
而不是getfenv
。我知道它已在5.2中删除了。)
答案 0 :(得分:5)
没有明确记录,但在没有任何确切陈述的情况下,您应该假设它与Lua的其余部分一样,即使用全局环境。
dofile
也在全局环境中运行该文件,而不是在调用环境中运行。换句话说,dofile
与Lua没有的include
不同。
require
本质上是dofile
的一个版本,支持路径和缓存加载的文件。因此,它还在全局环境中运行文件,而不是在调用环境中运行。