2012-04-12 32 views
9

Ich habe gelesen, dass Dart Funktion Überladung nicht unterstützt. Unterstützt es das Überladen von Operatoren. Wenn ja, wäre nett und zeige mir wie in einem einfachen Beispiel wie es gemacht wird. Und was sind einige Vorteile usw. Ich bin neu in der Programmierung. Danke.Unterstützt Dart Operator überladen

+0

wo haben Sie gelesen, dass * Dart Funktion Überladung * nicht unterstützt? –

Antwort

14

Ja Dart unterstützt die Überlastung des Operators mit dem Operator , gefolgt von dem Operator, den Sie überladen möchten. Das folgende Beispiel überlädt den == Operator für die MyClass Objekt:

class MyClass { 
    operator ==(MyClass other) { 
    // compare this to other 
    } 
} 

fast alle Darts integrierten Operatoren können mit einigen bemerkenswerten Ausnahmen ist der Zuweisungsoperator = und Referenz Äquivalenz überlastet werden Operator === (existiert nicht mehr).

Was den Vorteil des Betreibers Überlastung es Ihnen Betreiber wiederverwenden kann, die eine bekannte semantische Bedeutung wie == oder + für Operationen auf Objekte. Wenn Sie zum Beispiel eine Matrix-Klasse, die die + Betreiber überlastet, dann können Sie zwei Matrizen hinzufügen mit der Syntax m1 + m2 anstelle der umständlichen m1.plus (m2)

+0

könnte mir sagen, ob "andere" etwas Besonderes ist oder könnte es etwas anderes genannt werden. Wie == (MyClass ggg) –

+1

@MuhammadUmer andere könnte nichts benannt werden, es ist nur der Parametername des Klassenobjekts, das Sie vergleichen, dh das == andere oder das + andere –

+0

Muss das Argument der gleiche Typ sein, oder Kann man Operatoren wie Scala's List cons operator :: erzeugen, wobei der Typ auf der linken Seite der Elementtyp ist, um den neuen Kopf zu machen, und der Typ auf der rechten Seite ist der Listentyp? – pohl

6

zu erweitern Lars' Antwort, Sie können Operatoren auch mit der Inline-Funktionssyntax überladen.

class MyClass { 
    operator ==(MyClass o) => id == o.id; 
}