Да, в Lua вы можете создавать выражения, вызываемые немедленно (IIFE).Lua требует скобки вокруг выражения функции: (function () return 10 end)()
.Снимите скобки, function () return 10 end()
, и вы получите синтаксическую ошибку.И назвать функцию невозможно: (function f() return 10 end)()
.Синтаксис именованной функции является синтаксическим сахаром для присваивания функции переменной f = function() return 10 end
, а присваивания не являются выражениями в Lua, поэтому их нельзя вызывать как функции.
JavaScript также требует скобоквокруг выражения функции или вокруг всей комбинации функций и скобок вызова функции: (function () { return 10; })()
или (function () { return 10; }())
.Скобки гарантируют, что function () {}
интерпретируется как выражение функции, а не как объявление функции.Эквивалент второй конструкции, (function () return 10 end())
, недопустим в Lua.В JavaScript, но не в Lua, вы можете указать имя в выражениях функций, и в случае ошибки имя будет отображаться в следах стека: (function f() { return 10; })()
или (function f() { return 10; }())
.