为什么隐式转换不在这里工作?

时间:2017-09-09 10:17:17

标签: scala implicit-conversion implicit implicits

鉴于,

trait GetOrElseAble[Container[_]] {
  def getOrElse[A](one : Container[A], two : A) : A
}

implicit val optionGetOrElseAble = new GetOrElseAble[Option] {
  override def getOrElse[A](one: Option[A], two: A): A = one.getOrElse(two)
}

trait GetOrElseOp[A,F[_]] {
  val evidence : GetOrElseAble[F]
  val value : F[A]
  def |(other : A) : A = evidence.getOrElse(value,other)
}

最后隐含的def,

implicit def toGetOrElseOp[A,F[_]](f : F[A])(implicit e : GetOrElseAble[F])  = new GetOrElseOp[A,F] {
  override val evidence = e
  override val value = f
}

以下作品:

toGetOrElseOp(None)(optionGetOrElseAble) | 100

但是,None | 100不起作用。

根据我的理解,implicit def应该已经启动,将None转换为类型GetOrElseOp,上述内容应该有效。

我错过了什么?谢谢!

0 个答案:

没有答案