Я пытаюсь использовать самозапускающиеся анонимные функции в 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()
Что здесь происходит?