2 Stimmen

Lua-Schließungen bei der Implementierung einer DSL

Lua hat eine sehr schöne Syntax für den Aufruf ohne Parenthese, die es mir in Verbindung mit Funktionsabschlüssen ermöglicht, folgendes zu schreiben

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

Wenn ich jedoch die Klammern um (tag) entferne, führt dies zu einem Kompilierfehler. Warum also erlaubt Lua Parameter ohne Klammern (d.h. "def") und nicht Parameter ohne Klammern für var (in diesem Fall table)?

4voto

Mark Rushakoff Punkte 236626

Desde Programmieren in Lua :

Wenn die Funktion ein einziges Argument hat und dieses Argument entweder eine Zeichenkette oder ein Tabellenkonstruktor ist, dann sind die Klammern optional:

Mein Verständnis Ihrer obigen Situation ist, dass Tag eine lokale Variable ist (die weder eine literale Zeichenfolge noch ein Tabellenkonstruktor ist), also test(tag) erfordert immer Klammern. Sie nicht brauchen Klammern um "def" denn test(tag) gibt eine Funktion zurück, die eine einzelne Zeichenkette akzeptiert, und diese Funktion wird sofort auf "def" .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X