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) = ???
      }