我想在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()
这里发生了什么?
;(function...)
),以确保它永远不会被视为先前语句的一部分。 - Keith Bennettconsole.log("test") ( () => console.log("foo"))()
同样的问题,同样的解决方案(添加一个;
)。这是因为括号在许多编程语言中用于多个不同的目的,可能会导致这些歧义。 - DarkWiiPlayer