Я пытаюсь понять, почему именно неявное преобразование работает в одном случае, но не в другом. Вот пример:
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, прежде чем возвращать его.
Что дает?