我不明白在sorted
特征中签署SeqLike
方法的目的:
def sorted[B >: A](implicit ord: Ordering[B]): Repr
更确切地说,我没有得到:
B>:A
Repr
是什么意思?也许你可以对此有所了解。
提前感谢您的回答!
答案 0 :(得分:2)
<canvas id="myCanvas2" width="100" height="103" style="border:1px solid black;display: -webkit-inline-box;border: 1px solid black;margin-right: 0px;">
表示可以使用B上的任何排序调用[B >: A]
,其中B是A的超类型。
我认为A是特质本身的类型参数,即
SeqLike定义为sorted
。详尽无遗,如SeqLike[A, This]
。 SeqLike[A, +This <: SeqLike[A, This] with Seq[A]]
是F-有界多态性。
This <: SeqLike[A, This]
actual return type of SeqLike.sorted
为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.
。
这很有用,因为它允许SeqLike的方法不仅返回This
s,还返回子类型!
回到之前的简单例子......
SeqLike
答案 1 :(得分:2)
Ordering
,它应该能够处理A
的某些超类型(因此B >: A
)。即您应该可以使用Ordering[AnyVal]
来比较Int
值(因为AnyVal
是Int
的超类型。)Repr
是SeqLike
特征本身(SeqLike[+A, +Repr]
)的类型参数,描述为“包含元素的实际集合的类型”。这是为了确保像sorted
这样的方法会返回相同类型的集合(例如List.sorted
仍然是List
)。答案 2 :(得分:0)
以下是B >: A
:
让我们考虑这个类(不编译):
class C[+T] {
def m(x: T): T = x
}
+T
表示协变,即C[Any]
是例如C[Int]
的超类。 "123"
。现在(String
是Any
,所以它也是val cInt: C[Any] = new C[Int]
cInt.m("123") // ??? We are supposed to return Int here
):
class C[+T] {
def m[A >: T](x: A): A = x
}
实际上:
A
所以(编译器推断Any
为String
和Any
最近的共同祖先,这是val cInt: C[Any] = new C[Int]
cInt.m("123") // Any = 123
)
SeqLike
trait SeqLike[+A, +Repr]
的定义:+A
,注意{{1}}