Scala 扩展泛型类型-PriorityQueue
我不明白为什么我需要Scala 扩展泛型类型-PriorityQueue,scala,generics,priority-queue,generic-programming,Scala,Generics,Priority Queue,Generic Programming,我不明白为什么我需要()以及MyTypeQueOrdering的位置。 以下是PriorityQueue的标题,位于: 以下是我的尝试(有效): 。。。但是我不明白为什么我需要()。PriorityQueue[MyType]()是否返回某些内容?尝试将MyTypeQueOrdering设置为隐式对象: object Implicits { //implicit objects can't be top-level ones implicit object MyTypeQueOrderin
()
以及MyTypeQueOrdering
的位置。
以下是PriorityQueue
的标题,位于:
以下是我的尝试(有效):
。。。但是我不明白为什么我需要
()
。PriorityQueue[MyType]()
是否返回某些内容?尝试将MyTypeQueOrdering
设置为隐式对象
:
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实例化,然后传递排序也许检查一下这一点您的代码对我来说运行良好。你得到了什么信息?Scala 2.10.2+java 1.8.0(java HotSpot(TM)64位服务器虚拟机(构建25.0-b70,混合模式))现在可以工作了,但我仍然不清楚,什么方法需要(MyTypeQueOrdering)
?也是构造函数?是的,排序必须在创建时可用,并用于对元素进行优先级排序。我认为它被声明为隐式只是为了方便,这样如果你在范围内有一个排序,你就不必显式地传递它。您可以大致想象PriorityQueue也是这样:类PriorityQueue[A](ord:Ordering[A])
。这样,您的第一个示例就可以在没有第一个括号的情况下正常工作。在我的示例中,PriorityQueue[MyType]()
运行了没有参数的构造函数,其中参数应该在那里MyTypeQueOrdering
应该作为构造函数参数,对吗?
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] { ... }