我是 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
编辑:感谢 Beryllium,通过制作 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