암시 적 변환이 한 케이스에서는 정확히 작동하지만 다른 케이스에서는 작동하지 않는 이유를 이해하려고합니다. 기본적으로, 나는 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에 결과를 할당하면 사라집니다.
무엇을 제공합니까?