[B >: A]
bedeutet, dass sorted
kann mit jeder Ordnung auf B bezeichnet werden, wobei B ein übergeordneter Typ von A ist
Ich nehme A der Typ-Parameter des Merkmals selbst, dh
SeqLike ist definiert als SeqLike[A, This]
. Um erschöpfend zu sein, wie SeqLike[A, +This <: SeqLike[A, This] with Seq[A]]
. Die This <: SeqLike[A, This]
ist F-beschränkter Polymorphismus.
trait A[T <: A[T]] {} // the type parameter to A must be an A
class C extends A[C] {} // this is how you use it.
Die actual return type of SeqLike.sorted
ist This
.
Dies ist nützlich, da SeqLike's Methoden nicht nur SeqLike
s, sondern auch Subtypen zurückgeben können!
Gehen wir zurück zu den einfachen exemple früher ...
trait Model[T <: Model[T]] {
def find(id: Int): T = ...
}
class User extends Model[User]
val model: User = new User().find(3) # no need to cast.
Ich verstehe immer noch nicht die Notwendigkeit für 1. Können Sie ein Beispiel dafür geben, warum ich in der Lage sein sollte, eine Bestellung [AnyVal] zu verwenden, um Int zu vergleichen, und nicht nur eine einfache Bestellung [Int]. Also unterzeichne ich das WAS, ich verstehe das WARUM nicht. – Adrian
Danke für Punkt 2. obwohl, das ist jetzt klar! – Adrian
Wenn Sie eine Bestellung [Tier] haben, sollten Sie in der Lage sein, eine Liste [Hund] zu sortieren. –