Question

Lua a une très belle syntaxe d’appel sans parenthèse qui, couplée aux fermetures de fonctions, me permet d’écrire ce qui suit

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
{
}

Cependant, si je supprime la parenthèse autour de (balise), il en résulte une erreur de compilation. Alors, pourquoi Lua autorise-t-il les paramètres sans parenthèse (c'est-à-dire "def") et non sans parenthèse var (table dans ce cas)?

Était-ce utile?

La solution

De la Programmation en Lua :

  

Si la fonction a un seul argument et qu'il s'agit d'une chaîne littérale ou d'un constructeur de table, les parenthèses sont facultatives:

Si j'ai bien compris la situation ci-dessus, cette balise est une variable locale (qui n'est ni une chaîne littérale ni un constructeur de table). Par conséquent, test (balise) nécessite toujours des parenthèses. Vous n'avez pas besoin de parenthèses autour de " def & car test (balise) renvoie une fonction qui accepte une seule chaîne, et cette fonction est immédiatement appliqué à "def" .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top