有没有记载`require`在全球环境中运行块?

时间:2013-08-19 09:51:33

标签: lua

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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