一个包含闭包的语言中的函数,根据在外部定义的变量采取不同的操作。

在支持闭包的语言中(在本例中为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

然后一切都按照我从非闭包背景下“预期”的方式运行。

我想确认一下,我上面的推理正确吗?这是(显式传递变量)唯一/最好的方法吗?

点赞
用户568801
用户568801

你的代码没有改变值的原因是因为你 重新声明了 变量 a。如果你改成下面的代码:

local a = 100

local function checkAAndDoSomething()
    print(a * 10)
end

checkAAndDoSomething()
a = 200
checkAAndDoSomething()

你会得到你原本期望的输出:

1000
2000

我无法对最佳做法进行太多评论,因为它高度依赖于情况。我倾向于使用明确的参数,但我的情况可能完全不同于你的。

2015-01-31 07:36:04