2012-11-01 24 views
18

このコードがScala 2.9.2で型の不一致エラーを引き起こすのはなぜですか?これはOKですオプションgetOrElse型の不一致エラー

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英語を修正していただきありがとうございます。 – sndyuk

答えて

29

は、それが不完全なツリートラバーサルの不要な場合だ私はgetOrElseリターンがStringを入力しますが、実際にそれがjava.io.Serializable返すことを期待しました。 getOrElseのシグネチャではタイプの拡大が可能であるため、StringOption[String]ではないことがわかったときは、まずgetOrElseの異なるタイプの数字を入力しようとします。つまり、Serializableです。しかし、今は"a".getOrElse[Serializable]("")を持っています。それは固まっています。それは、暗黙のチェックの前に問題がタイプをあまりにも一般的にしていたとは思いません。

あなたは問題が実現すると、修正があります:

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

今タイパーがlet's-広げる道をさまよい、および暗黙のを見つけていません。

関連する問題