是否有记录表明`require`在全局环境中运行块?

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

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

点赞
用户107090
用户107090

将下面翻译成中文并且保留原本的 markdown 格式

在缺乏明确说明的情况下,你应该假设它像 Lua 的其他部分一样使用全局环境。

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

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

2013-08-19 10:16:11