Lua 具有闭包的语言中的函数,根据外部定义的变量采取不同的操作
在支持闭包的语言中(本例中为Lua),是否有任何方法可以检查外部变量的值,而不将其作为变量传递到函数中 当我执行以下操作时:Lua 具有闭包的语言中的函数,根据外部定义的变量采取不同的操作,lua,closures,Lua,Closures,在支持闭包的语言中(本例中为Lua),是否有任何方法可以检查外部变量的值,而不将其作为变量传递到函数中 当我执行以下操作时: local a = 100 local function checkAAndDoSomething() print(a * 10) end checkAAndDoSomething() local a = 200 checkAAndDoSomething() 我得到: 1000 1000 我找到的解决方案是将变量作为参数显式地传递到函数中,如中所示 loc
local a = 100
local function checkAAndDoSomething()
print(a * 10)
end
checkAAndDoSomething()
local a = 200
checkAAndDoSomething()
我得到:
1000
1000
我找到的解决方案是将变量作为参数显式地传递到函数中,如中所示
local function checkAAndDoSomething(a)
print(a * 10)
end
然后,在非闭包的背景下,一切都按“预期”进行
我只是想确认一下,我上面的推理正确吗?这(显式传递变量)是唯一/最好的方法吗?代码没有更改值的原因是因为您重新声明了变量
a
。如果您改为这样做:
local a = 100
local function checkAAndDoSomething()
print(a * 10)
end
checkAAndDoSomething()
a = 200
checkAAndDoSomething()
您将获得预期的输出:
1000
2000
我不能对做某事的最佳方式做太多评论,因为这在很大程度上取决于形势。我倾向于直言不讳的争论,但我的情况可能与你的完全不同。哦,哇,完全错过了重新声明,谢谢!:)猜测需要再次阅读闭包以真正理解它们的作用……”“重新声明变量”表明存在一个变量。其实有两个,;只是一个阴影笼罩着另一个。在第二个在第一个之前结束的代码中,第一个可以通过名称再次访问。