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
。
我对 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
。