代码之家  ›  专栏  ›  技术社区  ›  Legofan431

Lua:本地功能范围

  •  4
  • Legofan431  · 技术社区  · 6 年前

    我对Lua中的本地函数有点困惑。请看下面这个简化的示例。

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

    在运行这段代码时,我在函数“f”中得到一个错误,因为函数“g”是一个nil值。根据我的理解,这两个函数应该在代码到达对函数“g”的调用时声明,而且由于这两个函数还没有到达它们所在的块的末尾(函数“test”),所以它们应该仍然可以访问。当将函数声明为全局函数时,这段代码工作得很好,我真的不知道为什么它不适用于本地函数。《Lua编程》一书对我也没有帮助。

    1 回复  |  直到 6 年前
        1
  •  4
  •   lhf    6 年前

    local function g() <BODY> end 是等效的 local g; g=function () <BODY> end .

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

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

    尝试定义 g级 之前 f .