मैं समझने की कोशिश कर रहा हूं कि एक मामले में वास्तव में एक अंतर्निहित रूपांतरण क्यों काम कर रहा है, लेकिन दूसरे में नहीं।लागू रूपांतरण अजीबता
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]]
को एक अंतर्निहित रूपांतरण है, और एक समारोह, कि एक वैकल्पिक स्ट्रिंग है, जिसमें परोक्ष लिपटे हो जाता है देता है परिभाषित करने के लिए कोशिश कर रहा हूँ: यहाँ एक उदाहरण है।
सवाल क्यों, जब मैं (ऊपर NotWorking
) Option[String]
सीधे वापस जाने के लिए प्रयास करते हैं, मैं एक त्रुटि (found : String("foo") required: Wrapper[String]
), कि दूर चला जाता है अगर मैं इसे लौटने से पहले एक वैल के लिए परिणाम आवंटित मिलता है।
क्या देता है?