Scala collection.breakOut不适用于案例类?

时间:2014-10-04 08:27:53

标签: scala collections

我正在尝试将输入数据解析为TreeSet中的case类,但它似乎无法工作。

case class Block(letter: Char)
// This does not compile
val brokenBlocks: collection.immutable.TreeSet[Block] = "A B C".split(' ').map(letter => Block(letter(0)))(collection.breakOut)
// Although this compiles
val workingBlocks: collection.immutable.TreeSet[Int] = "A B C".split(' ').map(letter => letter(0).asDigit)(collection.breakOut)

编译错误:

type mismatch;  found   : scala.collection.generic.CanBuildFrom[Any,Char,String]
required: scala.collection.generic.CanBuildFrom[Array[String],Block,scala.collection.immutable.TreeSet[Block]]

我在scala工作表中尝试这个。

1 个答案:

答案 0 :(得分:2)

与案例类完全无关。如果您曾尝试构建List或Vector,那么它可以正常工作。

TreeSet要求对其元素的类型进行排序。在Int上有一个,但在Block上没有。

如果您添加一个,请说在随播对象

object Block {
   implicit val ordering: Ordering[Block] = Ordering.by(_.letter)
}

然后它的工作原理。