【问题标题】:Scala diverging implicit expansion compiler errorScala发散隐式扩展编译器错误
【发布时间】:2013-04-26 03:06:58
【问题描述】:

有人可以帮我理解下面的编译错误消息吗?我已经看了一段时间了,我不明白这是怎么回事。

  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

编辑: 类声明如下:

  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

【问题讨论】:

  • 嗨 - 我认为这在很大程度上取决于 Leaf 的定义 - 只是复制了你的例子并推断出 Leaf 类可能看起来像这样:case class Leaf (weight: Char, freq: Int) 它对我来说很好用。另外你使用什么 scala 版本(2.10、2.9)?
  • 更新了我的答案以说明类定义
  • 你使用的是哪个 scala 版本? - 或者:你能用 Scala 2.10.1 再试一次并干净编译吗? - 似乎适用于 2.10,因为我没有任何问题 - 以及“Vorsprung”(请参阅​​下面的答案)。

标签: scala


【解决方案1】:

在 scala 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))

【讨论】:

  • 我猜这是我的版本中的一个错误,即 2.8
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2015-03-30
  • 2011-06-20
  • 2017-12-30
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
相关资源
最近更新 更多