我对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编程》一书对我也没有帮助。
local function g() <BODY> end 是等效的 local g; g=function () <BODY> end .
local function g() <BODY> end
local g; g=function () <BODY> end
在里面 f ,名称 g 已解析为全局,因为 local g 出现在之后 f 已结束。这是错误消息告诉我们的:
f
g
local g
attempt to call a nil value (global 'g')
尝试定义 g级 之前 f .
g级