【发布时间】:2017-05-15 14:05:14
【问题描述】:
我试图理解为什么隐式转换在一种情况下确实有效,但在另一种情况下却无效。 这是一个例子:
case class Wrapper[T](wrapped: T)
trait Wrapping { implicit def wrapIt[T](x: Option[T]) = x.map(Wrapper(_))
class NotWorking extends Wrapping { def foo: Option[Wrapper[String]] = Some("foo") }
class Working extends Wrapping {
def foo: Option[Wrapper[String]] = {
val why = Some("foo")
why
}
}
基本上,我有一个从Option[T] 到Option[Wrapper[T]] 的隐式转换,并且正在尝试定义一个函数,该函数返回一个可选字符串,该字符串被隐式包装。
问题是为什么当我尝试直接返回Option[String](上面的NotWorking)时,我得到一个错误(found : String("foo") required: Wrapper[String]),如果我在返回之前将结果分配给一个val,它就会消失。
什么给了?
【问题讨论】: