我对Lua中的本地功能感到有些困惑。请看下面的简化示例。
function test()
local function f()
print("f")
g()
end
local function g()
print("g")
end
f()
end
test()
运行此代码后,我在函数“f”中出现错误,因为函数“g”是零值。根据我的理解,一旦代码到达函数“g”的调用,两个函数都应该被声明,并且因为两个函数还没有到达它们所在的块的末尾(函数“test”),它们应该仍然是无障碍。在将函数声明为全局函数时,此代码工作正常,我真的不确定它为什么不能与本地函数一起使用。 “Lua编程”一书对我也没有帮助。
答案 0 :(得分:2)
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
。