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对象。如果没有,请回退到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