私はscalaの初心者で、ここで何が起こったのか理解できません:
与えられた:
val reverse:Option[MyObject] = ...
ブールmyObject.isNaire
値を返します。
私が行った場合 :
val v:Option[Boolean] = reverse.map(_.isNaire)
val b:Boolean = v.getOrElse(false)
それは動作します。
今、もし私がするなら:
val b:Boolean = reverse.map(_.isNaire).getOrElse(false)
でコンパイルに失敗しますtype mismatch: found Any, required Boolean
編集 : ベリリウムに感謝します。SSCCE を作成することで、説明の始まりを見つけました。最初の例では、myObject は Java クラスなので、isNaire は java.lang.Boolean です。暗黙の変換はこれを透過的にするべきだと思ったので、説明はまだ歓迎されています。
class Test(val naire:java.lang.Boolean)
class Other {
val testValue = Some(new Test(true))
def mysteriousCompilationError:Boolean = testValue.map(_.naire).getOrElse(false)
}
注: ScalaCompiler は 2.10.2 です。