Вопрос

У Lua действительно хороший синтаксис вызова без скобок, который в сочетании с замыканиями функций позволяет мне написать следующее

local tag = 1
function test(obj)
    return 
        function(str)
            return 
            function (tbl)
                tbl.objtag = tag
                tbl.objname = str
                return tbl
            end
        end

end
test (tag) "def"
{
}

test tag "def" --error
{
}

Однако, если я уберу круглые скобки (тег), это приведет к ошибке компиляции. Так почему же Lua допускает параметры без скобок (то есть «def»), а не параметры без скобок (таблица в данном случае)?

Это было полезно?

Решение

Из программирования на Lua :

  

Если функция имеет один единственный аргумент и этот аргумент является либо литеральной строкой, либо конструктором таблицы, то скобки являются необязательными:

Мое понимание вашей ситуации, приведенной выше, заключается в том, что тег является локальной переменной (которая не является ни литеральной строкой, ни конструктором таблицы), поэтому для test (tag) всегда требуются скобки. Вам не нужны круглые скобки вокруг " def " , потому что test (tag) возвращает функцию, которая принимает одну строку, и эта функция немедленно применяется к " def " .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top