2013-04-26 85 views
0

有人可以幫我理解下面的編譯錯誤消息嗎?我一直在看這一段時間,我不明白什麼是錯的。斯卡拉分歧implicit擴展編譯器錯誤

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = { 
    val buff = ListBuffer[Leaf](); 
    for(u<-freqs) { 
     val v = new Leaf(u._1, u._2) 
     buff += v 
    } 
    buff.toList.sortBy(_.weight) //<= offending line 
    } 

錯誤消息:

發散類型scala.math.Ordering [B]與方法Tuple9在對象開始 訂購

EDIT隱式膨脹: 類聲明的樣子:

abstract class CodeTree 
    case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree 
    case class Leaf(char: Char, weight: Int) extends CodeTree 
+2

嗨 - 我認爲這嚴重依賴於葉的定義 - 只需複製你的榜樣,並推斷該類葉也許可以是這樣的:'情況class Leaf(weight:Char,freq:Int)',它對我來說工作得很好。你還使用什麼scala版本(2.10,2.9)? – 2013-04-26 04:26:37

+0

更新我的答案來說明類定義 – 2013-04-26 05:56:54

+0

您使用了哪個scala版本? - 或者:你可以用Scala 2.10.1再試一次嗎? - 似乎與2.10一起工作,因爲我沒有任何問題 - 以及「Vorsprung」(見下面的答案)。 – 2013-04-26 11:51:28

回答

0

件我的作品在斯卡拉2.10.0

import scala.collection.mutable._ 

然後粘貼您在上面提供的代碼。 makeOrderedLeafList編譯沒有錯誤,似乎在預期的方式工作:

scala> makeOrderedLeafList(List(('a',8),('b',9),('c',99),('d',1))) 
res0: List[Leaf] = List(Leaf(d,1), Leaf(a,8), Leaf(b,9), Leaf(c,99)) 
+0

我想這是我的版本中的一個bug,它是2.8 – 2013-04-26 17:05:02