Scala 如何参数化具有视图绑定的类的实例?
我的动机是我想要一个用于排序函数的抽象类。现在看来:Scala 如何参数化具有视图绑定的类的实例?,scala,generics,Scala,Generics,我的动机是我想要一个用于排序函数的抽象类。现在看来: abstract class Sorter[A <% Ordered[A]]{ def apply(xs: Seq[A]): Seq[A] } 我想我的问题有两个方面: 我的抽象类的东西是正确的吗 如何参数化我的排序 视图边界是这样的,如果您不必使用它们,您可以编写一些简单的内容,如: trait Sorter[A] { def sort(xs: Seq[A])(implicit ord: Ordering[A]):
abstract class Sorter[A <% Ordered[A]]{
def apply(xs: Seq[A]): Seq[A]
}
我想我的问题有两个方面:
trait Sorter[A] {
def sort(xs: Seq[A])(implicit ord: Ordering[A]): Seq[A]
}
new Sorter[Int] {
override def sort(xs: Seq[X])(implicit ord: Ordering[X]): Seq[X] = {
xs.sorted
}
}
Sorter
是一个特性,但很可能是一个抽象类。参数化实例在括号之前完成,如示例所示
另一方面,在Scala中,我认为没有必要使用抽象类(或特征)来进行排序
集合已经定义了sorted
和sortBy
方法。因此,当您拥有a
的col
集合时,您可以使用col.sorted
对其进行排序,前提是您在范围内有一个隐式排序[a]
这取决于您是否需要排序,或者是否需要抽象类和具体实现
请记住,您始终可以实现自定义排序
如下:
new Ordering[Int] {
override def compare(x: X, y: X) = ???
}
不推荐使用视图边界。你一定要用吗?不,我不用。我应该用什么来代替呢?这只是为了练习scala,谢谢!我在范围内的新列表中得到一个“错误:未找到:键入X”?注意,在我的示例中,我将
X
作为Int
做了一个具体的定义,只有X
在范围内并且实现了可比的或者在范围内有一个排序[X]
,才有可能有一个泛型
new Ordering[Int] {
override def compare(x: X, y: X) = ???
}