在 Lua 中自调用匿名函数时出错
Error with self invoking anonymous functions in Lua
我正在尝试在 Lua 中使用自调用匿名函数,但发现了一些奇怪的行为。
这个:
(function ()
print("self-invoking approach")
end)()
print("standard approach")
工作正常并打印以下输出:
self-invoking approach
standard approach
但将两者颠倒:
print("standard approach")
(function ()
print("self-invoking approach")
end)()
导致此错误:
➜ hammerspoon lua temp.lua
standard approach
lua: temp.lua:1: attempt to call a nil value
stack traceback:
temp.lua:1: in main chunk
[C]: in ?
奇怪的是,当 Lua REPL 中的代码为 运行 时,失败仅在函数形式为第二个时发生,并且两个调用都包含在调用的外部函数中:
function foo()
print("standard approach")
(function ()
print("self-invoking approach")
end)()
end
foo()
这里发生了什么?
这是一个解析歧义。非工作案例被解析为:
print("standard approach")(function ()
print("self-invoking approach")
end)()
换句话说,它打印 standard approach
,然后获取 print
的 return 值(即 nil
),并尝试用您的自调用函数作为参数(之后它也会尝试调用它的结果,如果它还没有崩溃的话)。要修复它,请在第一个 print
函数调用的末尾添加一个分号。
我正在尝试在 Lua 中使用自调用匿名函数,但发现了一些奇怪的行为。
这个:
(function ()
print("self-invoking approach")
end)()
print("standard approach")
工作正常并打印以下输出:
self-invoking approach
standard approach
但将两者颠倒:
print("standard approach")
(function ()
print("self-invoking approach")
end)()
导致此错误:
➜ hammerspoon lua temp.lua
standard approach
lua: temp.lua:1: attempt to call a nil value
stack traceback:
temp.lua:1: in main chunk
[C]: in ?
奇怪的是,当 Lua REPL 中的代码为 运行 时,失败仅在函数形式为第二个时发生,并且两个调用都包含在调用的外部函数中:
function foo()
print("standard approach")
(function ()
print("self-invoking approach")
end)()
end
foo()
这里发生了什么?
这是一个解析歧义。非工作案例被解析为:
print("standard approach")(function ()
print("self-invoking approach")
end)()
换句话说,它打印 standard approach
,然后获取 print
的 return 值(即 nil
),并尝试用您的自调用函数作为参数(之后它也会尝试调用它的结果,如果它还没有崩溃的话)。要修复它,请在第一个 print
函数调用的末尾添加一个分号。