Lua - 函数

时间:2016-04-26 15:58:14

标签: scope lua local-variables

我有以下功能

function test()

  local function test2()
      print(a)
  end
  local a = 1
  test2()
end

test()

这打印出零

以下脚本

local a = 1
function test()

    local function test2()
        print(a)
    end

    test2()
end

test()

打印出来。

我不明白这一点。我认为声明一个局部变量使它在整个块中有效。由于变量' a'在test() - 函数作用域中声明,并且test2() - 函数在同一作用域中声明,为什么test2()不能访问test()局部变量?

2 个答案:

答案 0 :(得分:5)

test2可以访问已经声明的变量。订单很重要。因此,请在a之前声明test2

function test()

    local a; -- same scope, declared first

    local function test2()
        print(a);
    end

    a = 1;

    test2(); -- prints 1

end

test();

答案 1 :(得分:3)

在第一个示例中你得到nil,因为在使用a时没有看到a的声明,因此编译器声明a是全局的。在致电a之前设置test即可。但如果您将a声明为本地,则不会。