Lua:当地职能范围

时间:2018-02-19 13:45:48

标签: function lua local

我对Lua中的本地功能感到有些困惑。请看下面的简化示例。

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

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

  f()
end

test()

运行此代码后,我在函数“f”中出现错误,因为函数“g”是零值。根据我的理解,一旦代码到达函数“g”的调用,两个函数都应该被声明,并且因为两个函数还没有到达它们所在的块的末尾(函数“test”),它们应该仍然是无障碍。在将函数声明为全局函数时,此代码工作正常,我真的不确定它为什么不能与本地函数一起使用。 “Lua编程”一书对我也没有帮助。

1 个答案:

答案 0 :(得分:2)

local function g() <BODY> end相当于local g; g=function () <BODY> end

f中,名称g已解析为全局,因为local gf结束后显示。这是错误消息告诉我们的信息:

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

尝试在g之前定义f