2012-11-01 26 views
18

Neden bu kod Scala 2.9.2 bir tür uyumsuzluğu hatası zam geliyor? Bu TamamOpsiyon getOrElse tür uyumsuzluğu hatası

scala> implicit def StringToOption(s:String) = Option(s) 
StringToOption: (s: String)Option[String] 

scala> "a".getOrElse("") 
res0: String = a 

scala> var opt:Option[String] = "a".getOrElse("") 
<console>:8: error: type mismatch; 
found : java.io.Serializable 
required: Option[String] 
     var opt:Option[String] = "a".getOrElse("") 
              ^

:

scala> implicit def StringToOption(s:String): Option[String] = Option(s) 
StringToOption: (s: String)Option[String] 

scala> var b:Option[String] = "a".getOrElse("") toString 
b: Option[String] = Some(a) 
+0

> sschaef İngilizcemi düzeltmek için teşekkürler! – sndyuk

cevap

29

Eksik ağacın enine istenmeyen durum ben getOrElse döner String yazın ama aslında java.io.Serializable döndüren bekliyordu. getOrElse imzası, tür genişletmeye izin verir, bu nedenle String'un Option[String] olmadığını fark ettiğinde, ilk olarak getOrElse, yani Serializable üzerinde farklı türde bir yazı yazmayı dener. Ama şimdi "a".getOrElse[Serializable]("") var ve sıkışmış - farketmez, sorun, dolaylı kontrol etmeden önce sorunun çok genel olduğunu gösteriyordu. Sorunu anladığında

, orada Çözüm şudur:

"a".getOrElse[String]("") 

Şimdi Typer-Hadi genişletmek aşağı dolaşırken yolunu etmez ve örtük bulur.

İlgili konular