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

dre*_*ker 2 lua closures

在支持闭包的语言中(在这种情况下为Lua)有什么方法可以检查外部变量的值而不将其作为变量传递给函数?

当我这样做时:

local a = 100

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

checkAAndDoSomething()
local a = 200
checkAAndDoSomething()
Run Code Online (Sandbox Code Playgroud)

我明白了:

1000
1000
Run Code Online (Sandbox Code Playgroud)

我想出的解决方案是将变量作为参数明确地传递给函数,如

local function checkAAndDoSomething(a)
    print(a * 10)
end
Run Code Online (Sandbox Code Playgroud)

然后一切都按照非关闭背景的"预期"运作.

只是想确认一下,我的推理是否正确?这是(明确地传递变量)唯一/最好的方法吗?

sto*_*ack 5

您的代码未更改值的原因是您重新声明了该变量a.如果你这样做:

local a = 100

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

checkAAndDoSomething()
a = 200
checkAAndDoSomething()
Run Code Online (Sandbox Code Playgroud)

你得到了你期望的输出:

1000
2000
Run Code Online (Sandbox Code Playgroud)

我无法评论最佳做事方式是什么,因为它高度依赖于这种情况.我倾向于明确的论点,但我的情况可能与你的完全不同.