【发布时间】:2018-11-25 05:14:03
【问题描述】:
谁能解释一下为什么 lua 5.3.5 会这样?
a="global"
local b="local"
function problem(_ENV)
a="fn_a"
b="fn_b"
end
problem{}
print(_VERSION)
print("a",a)
print("b",b)
--[[ https://www.lua.org/cgi-bin/demo output:
Lua 5.3
a global
b fn_b
]]
为什么改变_ENV后局部变量可以改变?是错误还是功能?
【问题讨论】:
-
粗略地说,locals 优先于 upvalues,upvalues 优先于 globals。
-
本地人不在环境中;它们在块(编译单元)中。所以,这是一个功能。
-
如果您尝试使用用户提供的代码,请研究Lua sandboxing。
-
沙盒也有同样的问题 local b a="global" b="local" function fn() a="fn_a" b="fn_b" end print(a,b) run_sandbox(sandbox_env,fn ) 打印(a,b)
标签: lua