ケースクラスがIterable[T]
になると、toString
メソッドが変更されたようです。ケースクラスtoStringはIterable特性に絡まっていますか?
case class MyPoint(x: Int, y: Int)
case class MyOtherPoint(x: Int, y: Int) extends Iterable[Double] {
def iterator: Iterator[Double] = Iterator.fill(4)(1.0)
}
object Main extends App {
val my_pt = MyPoint(4,5)
println(my_pt) // MyPoint(4,5)
// println(my_pt.iterator) // ERROR, iterator is not a member of MyPoint
val my_other_pt = MyOtherPoint(4, 5)
println(my_other_pt) // MyOtherPoint(1.0, 1.0, 1.0, 1.0)
println(my_other_pt.productIterator.toList) // List(4, 5)
}
これは特にケースクラスは、デフォルトでProduct
を拡張し、これproductIterator
を持っていながら、彼らはIterable
を延長すると仮定されていないことを考えると、むしろ不幸と思われます。
これはScalaコンパイラのバグですか?