- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Lua 从 setfenv()
切换有什么大不了的至 _ENV
?
在各种“新消息”来源中,这一举措被认为是 Lua 5.1 和 5.2 版本之间最重要的变化之一。
但是,PIL 和其他地方给出的示例可以修剪为以下内容:
-- Lua 5.1 -- Lua 5.2
function myfunc() function myfunc()
setfenv(1, {}) _ENV = {}
end end
setfenv()
可以在函数的外部和内部使用,而
_ENV
只能从函数内部访问。 (当然,当使用 C API 时,可以直接访问 upvalues。)从我写的内容来看,5.2 方法似乎不太灵活。
最佳答案
Where's the simplicity?
local
一样具有词法范围。变量。所以如果你看你的代码,你可以很容易地看到一个函数在什么环境中。如果没有
local _ENV
在该函数的创建范围内,则环境应为块的环境(由
load
调用定义)。
关于Lua:setfenv() 与 _ENV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021461/
我正在尝试使用 setfenv 对一些函数进行沙盒处理,我收到以下输出: 123 nil 为什么调用sandboxTest()时testValue是nil,而在callSandboxedTest()中
Lua 从 setfenv() 切换有什么大不了的至 _ENV ? 在各种“新消息”来源中,这一举措被认为是 Lua 5.1 和 5.2 版本之间最重要的变化之一。 但是,PIL 和其他地方给出的示例
我正在尝试使用原始 Lua 文件进行配置,但不希望配置文件污染全局命名空间。 我遇到的问题是 dofile似乎总是在真实的全局环境中执行,所以外部文件只是将它们的所有声明都扔到 _G 中。 这是一个示
所以我有一个 Lua 脚本,我在其中设置函数的环境并定义我在环境中提供的其他函数。问题是,当我调用我在 setfenv 上执行的函数时,它在环境中调用的任何函数都使用全局 _G 环境来查找值,而不是我
我想在 lua 状态上加载一些函数,然后能够从 lua 线程调用这些函数。我试图在线程上 setfenv ,以便它们创建的变量仅限于线程并且不会出现在全局环境中。 lua_State *L = lua
如何重新创建 setfenv 的功能在 Lua 5.2 中?我在理解您应该如何使用新的 _ENV 时遇到了一些麻烦。环境变量。 在 Lua 5.1 中你可以使用 setfenv很容易地沙箱任何功能。
我是一名优秀的程序员,十分优秀!