看起來,如果案例類延伸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)
}
這似乎是相當不幸的,特別是考慮到雖然case類默認擴展Product
,從而有productIterator
,他們不是想延長Iterable
。
這是Scala編譯器中的錯誤嗎?