具有闭包的语言中的函数,该函数根据外部定义的变量采取不同的操作
a function in a language with closures that takes varying actions depending on a variable defined outside
在支持闭包的语言中(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
然后一切都像 "expected" 来自非闭包背景。
只是想确认一下,我上面的推理是否正确?这是(显式传递变量)唯一/最好的方法吗?
您的代码未更改值的原因是您重新声明 变量a
。如果您这样做:
local a = 100
local function checkAAndDoSomething()
print(a * 10)
end
checkAAndDoSomething()
a = 200
checkAAndDoSomething()
您得到了预期的输出:
1000
2000
我不能对做某事的最佳方式发表过多评论,因为这在很大程度上取决于具体情况。我倾向于明确论证,但我的情况可能与你的完全不同。
在支持闭包的语言中(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
然后一切都像 "expected" 来自非闭包背景。
只是想确认一下,我上面的推理是否正确?这是(显式传递变量)唯一/最好的方法吗?
您的代码未更改值的原因是您重新声明 变量a
。如果您这样做:
local a = 100
local function checkAAndDoSomething()
print(a * 10)
end
checkAAndDoSomething()
a = 200
checkAAndDoSomething()
您得到了预期的输出:
1000
2000
我不能对做某事的最佳方式发表过多评论,因为这在很大程度上取决于具体情况。我倾向于明确论证,但我的情况可能与你的完全不同。