3

编写模块时,文件在全局环境中运行,而不是在调用环境中:

-- 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 中被删除了。)

4

1 回答 1

5

它没有明确记录,但在没有任何精确声明的情况下,您应该假设它像 Lua 的其余部分一样工作,即使用全局环境。

dofile也在全局环境中运行文件,而不是在调用环境中。换句话说,dofileincludeLua 没有的 不同。

require本质上是一个dofile支持路径和缓存加载文件的版本。因此,它也在全局环境中运行文件,而不是在调用环境中。

于 2013-08-19T10:16:11.120 回答