Определение и вызов функции одновременно в lua - PullRequest
0 голосов
/ 06 декабря 2018

В javascript можно быстро создавать замыкания, одновременно определяя и вызывая функцию следующим образом:

function() {
    local something = 1;
    return function () {
        // something
    }
}()

Можно ли сделать то же самое в lua?

1 Ответ

0 голосов
/ 07 декабря 2018

Да, в 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; }()).

...