6

次の 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にフォールバックします。AnyLowPriorityWrites

ただし、このアプローチは機能しません。

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]]
4

0 に答える 0