Pregunta

Lua tiene una sintaxis de llamada sin paréntesis realmente agradable que, junto con los cierres de funciones, me permite escribir lo siguiente

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

Sin embargo, si elimino el paréntesis (etiqueta), se produce un error de compilación. Entonces, ¿por qué Lua permite los parámetros sin paréntesis (es decir, " def ") y no los parámetros var sin paréntesis (tabla en este caso)?

¿Fue útil?

Solución

De Programación en Lua :

  

Si la función tiene un solo argumento y este argumento es una cadena literal o un constructor de tabla, entonces los paréntesis son opcionales:

Comprendo su situación anterior es que la etiqueta es una variable local (que no es una cadena literal ni un constructor de tablas), por lo que test (etiqueta) siempre requiere paréntesis. no necesita paréntesis alrededor de " def " porque test (tag) devuelve una función que acepta una sola cadena, y esa función es aplicado inmediatamente a " def " .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top