具有闭包的语言中的函数,该函数根据外部定义的变量采取不同的操作

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

我不能对做某事的最佳方式发表过多评论,因为这在很大程度上取决于具体情况。我倾向于明确论证,但我的情况可能与你的完全不同。