Lua:函数关闭是一个本地函数吗?

时间:2014-09-27 01:14:29

标签: lua closures local

假设我有以下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"要在函数内添加函数定义(闭包)吗?

1 个答案:

答案 0 :(得分:4)

好吧,我想我自己得到了答案:

没有为封口添加前缀' g'与当地的'关键字,' g'实际上是全球性的!因为函数声明本质上是一个匿名函数赋值给Lua中的命名变量!所以上面代码中的闭包定义等同于:

function f(v)
    g = function()
        return v * v
    end
    return g
end

根据Lua变量范围规则,任何未明确标记为' local'的变量。是一个全球性的,所以基本上是'成为一个全局函数,我相信任何人都可以毫无问题地调用module.g()!

前缀'本地'到了'使它成为一个真正的局部变量,在“f'”之外无法无意中访问它。