423 Stimmen

Was ist der Unterschied zwischen Selbsttypen und Eigenschaftsunterklassen?

Ein Selbsttyp für ein Merkmal A :

trait B
trait A { this: B => }

sagt, dass " A kann nicht in eine konkrete Klasse gemischt werden, die nicht auch die B " .

Auf der anderen Seite, die folgenden:

trait B
trait A extends B

sagt, dass "jede (konkrete oder abstrakte) Klasse, die in A wird auch in B gemischt" .

Bedeuten diese beiden Aussagen nicht das Gleiche? Der Selbsttyp scheint nur dazu zu dienen, die Möglichkeit eines einfachen Kompilierfehlers zu schaffen.

Was übersehe ich?

0 Stimmen

Ich interessiere mich eigentlich für die Unterschiede zwischen Selbsttypen und Unterklassen in Traits. Ich kenne einige der üblichen Verwendungszwecke für Selbsttypen; ich kann nur keinen Grund finden, warum sie nicht auf die gleiche Weise mit Subtypisierung durchgeführt werden sollten.

35 Stimmen

Man kann Typparameter innerhalb von Selbsttypen verwenden: trait A[Self] {this: Self => } ist legal, trait A[Self] extends Self ist es nicht.

4 Stimmen

Ein Selbsttyp kann auch eine Klasse sein, aber ein Trait kann nicht von einer Klasse erben.

0voto

IttayD Punkte 26802

Im ersten Fall kann eine Untereigenschaft oder Unterklasse von B in alles, was A verwendet, hineingemischt werden; B kann also eine abstrakte Eigenschaft sein.

0 Stimmen

Nein, B kann in beiden Fällen ein "abstraktes Merkmal" sein (und ist es auch). Aus dieser Perspektive gibt es also keinen Unterschied.

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