Я хотел бы создать следующую особенность:Scala предотвращают смешивание методов
trait IntSet[A] extends Traversable[A] { self: Product =>
def foreach[U](f: A => U): Unit
}
case class AProduct(a: List[Int], b: List[Int]) extends IntSet[Int] {
def foreach[U](f: Int => U): Unit = {
for(aa <- a; bb <- b) f(aa*bb)
}
}
AProduct(List(1, 5,6,7), List(2,3,4,5)).toString
возвращает
(2, 3, 4, 5, 10, 15, 20, 25, 12, 18, 24, 30, 14, 21, 28, 35)
Но я не хочу, метод ToString из класса случая, чтобы перекрываться друг обходной! Как мне это преодолеть?
Я хочу, чтобы конечный результат будет:
"AProduct(List(1, 5,6,7), List(2,3,4,5))"
и, если это возможно, я хотел бы сделать что-то другое, чем следующее IntSet:
override def toString = this.getClass().getName()+"("+self.productIterator.mkString(",")+")"
который работает, но я действительно хотел бы не изобретать колесо.
Я не знал, что вы можете добавить импликации для классов непосредственно в компаньон. –
@ MikaëlMayer: Смотрите [Где Scala ищет implicits?] (Http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits). Объект Companion всегда находится в неявной области поиска. Это осторожно полезно. – senia