2013-04-26 66 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