Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 具有闭包的语言中的函数,根据外部定义的变量采取不同的操作_Lua_Closures - Fatal编程技术网

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

在支持闭包的语言中(本例中为Lua),是否有任何方法可以检查外部变量的值,而不将其作为变量传递到函数中

当我执行以下操作时:

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

我不能对做某事的最佳方式做太多评论,因为这在很大程度上取决于形势。我倾向于直言不讳的争论,但我的情况可能与你的完全不同。

哦,哇,完全错过了重新声明,谢谢!:)猜测需要再次阅读闭包以真正理解它们的作用……”“重新声明变量”表明存在一个变量。其实有两个,;只是一个阴影笼罩着另一个。在第二个在第一个之前结束的代码中,第一个可以通过名称再次访问。