.foreach
возвращает Unit
, поэтому вместо него должно быть .map
.
Попробуйте определить класс типа и передать неявный параметр с уровня метода на уровень класса
trait ToStr[T] {
def apply(factors: ListBuffer[Int], fac: ListBuffer[Int] => Int, elems: T*): String
}
object ToStr {
implicit val int: ToStr[Int] =
(factors, fac, elems) => elems.map((i: Int) => fac(factors) * i).toString
implicit val str: ToStr[String] = (_, _, elems) => elems.toString
}
class Seq[T : Ordering] (initialElems: T*)(implicit toStr: ToStr[T]) {
override def toString: String = toStr(factors, fac, elems: _*)
...
}
В противном случае def toString(implicit ev: T <:< Int): String
действительно не отменяет def toString: String
.