Lua:局部函数作用域

Lua: Scope of local functions

我对 Lua 中的局部函数有点困惑。请查看以下简化示例。

function test()
  local function f()
    print("f")
    g()
  end

  local function g()
    print("g")
  end

  f()
end

test()

根据 运行 这段代码,函数 "f" 出现错误,因为函数 "g" 是 nil 值。根据我的理解,一旦代码到达对函数 "g" 的调用,这两个函数就应该被声明,并且由于这两个函数还没有到达它们所在的块的末尾(函数 "test"),他们应该仍然可以访问。当将函数声明为全局函数时,这段代码工作正常,我真的不确定为什么它不适用于本地函数。这本书 "Programming in Lua" 也对我没有帮助。

local function g() <BODY> end 等价于 local g; g=function () <BODY> end.

f 中,名称 g 被全局解析,因为 local g 出现在 f 结束之后。这是错误消息告诉我们的内容:

attempt to call a nil value (global 'g')

尝试在 f 之前定义 g