鉴于,
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
,上述内容应该有效。
我错过了什么?谢谢!