으로 한 평가, 성공 실패 :스칼라 추론 : 나는 스칼라에서 초보자있어 여기에 무슨 일이 생긴 것을 이해하지 못하는 중간 발
을 감안할 때 :
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)
}
참고 :
implicit def Boolean2boolean(x: java.lang.Boolean): Boolean = x.booleanValue
그래서 첫 번째 경우 val v:Option[Boolean] = reverse.map(_.isNaire)
에 컴파일러가 볼
java.lang.Boolean
과 외모의 : ScalaCompiler는
java.lang.Boolean
에서
scala.Boolean
에 암시 적 변환이 년대
scala.Predef
에서 2.10.2
수정 된 버전을 컴파일 할 수 있으므로 [SSCE] (http://sscce.org/)를 제공하십시오. – Beryllium
'false'는'java.lang.Boolean'의 값이 아니기 때문에 java.lang.Boolean을 map() 함수 리터럴의 scala.Boolean으로 변환하는 것이 더 낫습니다. 예를 들어, 'map (_. predicate) .getOrElse (false)'는 다음과 같이 간단하게 나타낼 수 있습니다 :'def mysteriousCompilationError : Boolean = testValue.map (_. naire == true) .getOrElse (false)' – swartzrock