Lua - 函数中的局部变量作用域
Lua - Local variable scope in function
我有以下功能
function test()
local function test2()
print(a)
end
local a = 1
test2()
end
test()
这会打印出 nil
以下脚本
local a = 1
function test()
local function test2()
print(a)
end
test2()
end
test()
打印出 1。
这个我不明白。我认为声明一个局部变量会使它在整个块中有效。既然变量'a'是在test()-函数作用域中声明的,而test2()-函数也是在同一作用域中声明的,为什么test2()不能访问test()局部变量?
test2
可以访问已经声明的变量。订单很重要。所以,在 test2
:
之前声明 a
function test()
<b>local a;</b> -- same scope, declared first
local function test2()
print(a);
end
a = 1;
test2(); -- prints 1
end
test();
您在第一个示例中得到 nil,因为在使用 a
时没有看到 a
的声明,因此编译器将 a
声明为全局变量。在调用 test
之前设置 a
将起作用。但如果您将 a
声明为本地,则不会。
我有以下功能
function test()
local function test2()
print(a)
end
local a = 1
test2()
end
test()
这会打印出 nil
以下脚本
local a = 1
function test()
local function test2()
print(a)
end
test2()
end
test()
打印出 1。
这个我不明白。我认为声明一个局部变量会使它在整个块中有效。既然变量'a'是在test()-函数作用域中声明的,而test2()-函数也是在同一作用域中声明的,为什么test2()不能访问test()局部变量?
test2
可以访问已经声明的变量。订单很重要。所以,在 test2
:
a
function test()
<b>local a;</b> -- same scope, declared first
local function test2()
print(a);
end
a = 1;
test2(); -- prints 1
end
test();
您在第一个示例中得到 nil,因为在使用 a
时没有看到 a
的声明,因此编译器将 a
声明为全局变量。在调用 test
之前设置 a
将起作用。但如果您将 a
声明为本地,则不会。