Mögliche Duplizieren:
What is the difference between scala self-types and trait subclasses?Was bedeutet eine Objekt-Selbstanmerkung?
Ich verstehe eine Selbst Anmerkung als ein Versprechen an den Compiler, wo der Programmierer zeigt, dass ein Merkmal mit den kommentierten einen seinen mixin. Zum Beispiel:
scala> trait X
defined trait X
scala> trait Y { this: X => }
defined trait Y
scala> new Y {}
<console>:10: error: illegal inheritance;
self-type Y does not conform to Y's selftype Y with X
new Y {}
^
scala> new Y with X {}
res1: Y with X = [email protected]
Im vorherigen Beispiel scheiterte der dritte Ausdruck, weil wir keine gültigen X auf die neue Instanz festgelegt haben. Offensichtlich funktioniert das letzte gut. So weit, ist es gut. Und jetzt, lassen Sie uns ein anderes Beispiel sehen, das ein Objekt betrifft.
scala> object Z { this: X => }
defined module Z
Ich verstehe das Objekt instanziiert wird mit dem X Versprechen versagt (wir eine Instanz jetzt mit Zukunft Versprechen schaffen!), Wie sie in den nächsten Zeilen dargestellt, wobei die Züge leicht modifiziert wurden:
scala> trait X { class X1 }
defined trait X
scala> trait Y { this: X => new X1 }
defined trait Y
scala> object Z { this: X => new X1 }
<console>:8: error: not found: type X1
object Z { this: X => new X1 }
^
Also, was bedeutet die Objekt-Selbstannotation?
Ich denke, dass im Klassenfall, zum Beispiel: "Klasse A {das: X => neue X1}" Sie können mit "neuen A mit X" spielen, so hat es Sinn, aber ich kann keine Situation finden wo Man könnte die selbe Annotation in einem Objekt benötigen. – jeslg
Richtig, für Objekte und letzte Klassen macht es keinen Sinn, dass ich sehen kann. – axel22
Wohlgemerkt, ich denke, dass Objekte überschrieben werden können, wenn sie Mitglieder eines Merkmals oder einer Klasse sind. –