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

dgo*_*o.a 3 lua

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

-- other_file.lua
require('my_file')

-- my_file.lua
getfenv(2) == getfenv(0)   -- true
setfenv(1, {})             -- or module(...)
getfenv(2) == getfenv(0)   -- true
Run Code Online (Sandbox Code Playgroud)

我永远不记得读到这个.是在任何地方提到/记录的吗?

(这个问题更多的是关于require而不是getfenv.我知道它已经在5.2中删除了.)

lhf*_*lhf 5

它没有明确记录,但是如果没有任何精确的陈述,你应该假设它的工作方式与Lua的其余部分一样,即使用全局环境.

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

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