次の Scala コードのスニペットがあります。
import java.io.PrintWriter
trait Write[-A] {
def apply(out: PrintWriter)(x: A): Unit
}
trait LowPriorityWrites {
implicit object any extends Write[Any] {
override def apply(out: PrintWriter)(x: Any) = out.print(x)
}
}
object Write extends LowPriorityWrites {
implicit def iterable[A](implicit write: Write[A]): Write[Traversable[A]] = new Write[Traversable[A]] {
override def apply(out: PrintWriter)(xs: Traversable[A]) = {
xs foreach write(out)
out.println()
}
}
}
Write
基本的に、私が達成したいのは、最初に暗黙の inオブジェクトを探すことです。そうでない場合は、 fromのデフォルト.toString
にフォールバックします。Any
LowPriorityWrites
ただし、このアプローチは機能しません。
ambiguous implicit values:
[error] both method iterable in object Write of type [A](implicit write: Write[A])Write[Traversable[A]]
[error] and object any in trait LowPriorityWrites of type Write.any.type
[error] match expected type Write[Seq[Long]]