【发布时间】:2020-09-13 18:06:47
【问题描述】:
我正在尝试在 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 中运行代码时,只有在函数形式为 second 的情况下才会发生故障,并且两个调用都包装在一个被调用的外部函数中:
function foo()
print("standard approach")
(function ()
print("self-invoking approach")
end)()
end
foo()
这里发生了什么?
【问题讨论】:
标签: function lambda lua interpreter