在支持闭包的语言(在这种情况下为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


关于什么是做某事的最佳方法,我不能说太多,因为它高度依赖于具体情况。我倾向于提出明确的论据,但我的情况可能与您的情况完全不同。

10-02 05:40