2014-03-26 121 views
2

我不明白爲什麼我需要(),因此MyTypeQueOrdering去。 這裏是PriorityQueue頭,在official github發現:擴展泛型 - PriorityQueue

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]()會返回什麼?

+0

也許檢查這一個 http://stackoverflow.com/questions/789250/scala-is-there-a-way-使用優先級隊列就像我會在java – rofrol

回答

2

嘗試使MyTypeQueOrderingimplicit 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)會假設你試圖將該順序作爲構造函數參數傳遞。所以這就是爲什麼你需要明確地顯示無參數的實例,然後使訂貨

+0

你的代碼對我來說工作得很好。你收到什麼信息? – serejja

+0

Scala 2.10.2 + java 1.8.0(Java HotSpot™64位服務器虛擬機(構建25.0-b70,混合模式)) – serejja

+0

確定它現在可以工作,但對我而言仍然不清楚, (MyTypeQueOrdering)'?還構造函數? – IProblemFactory