暗黙の変換が1つのケースでは正確に動作しているが、他のケースでは正確に動作していない理由を理解しようとしています。基本的に、私はOption[T]
からOption[Wrapper[T]]
への暗黙的な変換を持っている、と暗黙のうちに包まれますオプションの文字列を返す関数を定義しようとしています暗黙の変換奇妙さ
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[String]
(NotWorking
上記)を返そうとすると、エラー(found : String("foo") required: Wrapper[String]
)が返されます。結果を返す前にvalに代入すると、それはなくなります。
何がありますか?