假设我有以下Lua代码:
function f(v)
function g()
return v * v
end
return g
end
显然,' g'在上面的Lua代码中形成了一个闭包。我想知道的是:是' g' a" local"默认情况下功能?
我是否必须明确添加' local'关键字之前'函数g()'制作' g'真正的本地?如果没有明确的本地',如果' g'因此,这是一个全球化的人,怎么会有人访问''来自外部范围?我怀疑我能做什么" f.g"为了获得'在这种情况下。
如果' g'是"本地"默认情况下,那就是允许" local"要在函数内添加函数定义(闭包)吗?
答案 0 :(得分:4)
好吧,我想我自己得到了答案:
没有为封口添加前缀' g'与当地的'关键字,' g'实际上是全球性的!因为函数声明本质上是一个匿名函数赋值给Lua中的命名变量!所以上面代码中的闭包定义等同于:
function f(v)
g = function()
return v * v
end
return g
end
根据Lua变量范围规则,任何未明确标记为' local'的变量。是一个全球性的,所以基本上是'成为一个全局函数,我相信任何人都可以毫无问题地调用module.g()!
前缀'本地'到了'使它成为一个真正的局部变量,在“f'”之外无法无意中访问它。