有人可以解释为什么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更改后可以更改局部变量?是错误还是功能?
答案 0 :(得分:1)
问::如何消除所有升值?
A:
[attr.pattern]="'([0-9]{3}) [0-9]{3}-[0-9]{4}'"
答案 1 :(得分:0)
您正在使用以下代码创建upvalue:
local b="local"
function problem(_ENV)
b="fn_b"
end
在解析函数解释器的过程中,该函数引用了一个局部范围内的局部变量,该局部范围从函数内部可见,因此可以将其直接链接起来。在_ENV
中,对局部变量的访问先于全局变量的查找。如果将local b="local"
放在函数定义之后,则不会被函数调用更改。