我正在尝试将输入数据解析为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工作表中尝试这个。
答案 0 :(得分:2)
与案例类完全无关。如果您曾尝试构建List或Vector,那么它可以正常工作。
TreeSet要求对其元素的类型进行排序。在Int上有一个,但在Block上没有。
如果您添加一个,请说在随播对象
中object Block {
implicit val ordering: Ordering[Block] = Ordering.by(_.letter)
}
然后它的工作原理。