扩展泛型类型 - PriorityQueue

时间:2014-03-26 15:07:46

标签: scala generics priority-queue generic-programming

我无法理解为什么我需要(),因此我需要MyTypeQueOrdering。 以下是PriorityQueue的标题,位于official github

class PriorityQueue[A](implicit val ord: Ordering[A])

这是我的尝试(有效):

class MyType{

}

object MyTypeQueOrdering extends Ordering[MyType]{
    def compare (n1:MyType, n2:MyType) = -1
}

class MyTypeQue extends PriorityQueue[MyType]()(MyTypeQueOrdering){

}

...但我无法弄明白为什么我需要()PriorityQueue[MyType]()会返回一些内容吗?

1 个答案:

答案 0 :(得分:2)

尝试MyTypeQueOrdering implicit object

object Implicits {
  //implicit objects can't be top-level ones
  implicit object MyTypeQueOrdering extends Ordering[MyType] {
    def compare(n1: MyType, n2: MyType) = -1
  }
}

这样你可以省略两个括号:

import Implicits._

class MyTypeQue extends PriorityQueue[MyType] { ... }

您的示例中需要空括号的原因是因为PriorityQueue[MyType](MyTypeQueOrdering)会假设您尝试将排序作为构造函数参数传递。这就是为什么你需要明确地显示no-arg实例化然后传递排序