В версии 2.9 существует такое преобразование, предположительно для обеспечения взаимодействия с Java. (Scala не нуждается в этом самостоятельно, потому что он прозрачно упаковывает и распаковывает примитивы, поэтому, возможно, поэтому он и не был включен ранее.)
georgii@gleontiev:~$ scala
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val jbool = java.lang.Boolean.TRUE
jbool: java.lang.Boolean = true
scala> val sbool = true
sbool: Boolean = true
scala> def sboolMethod(sbool: Boolean) = print("got scala.Boolean " + sbool)
sboolMethod: (sbool: Boolean)Unit
scala> sboolMethod(sbool)
got scala.Boolean true
scala> sboolMethod(jbool)
<console>:9: error: type mismatch;
found : java.lang.Boolean
required: scala.Boolean
sboolMethod(jbool)
^
scala> implicit def jbool2sbool(bool: java.lang.Boolean): scala.Boolean = bool.booleanValue
jbool2sbool: (bool: java.lang.Boolean)Boolean
scala> sboolMethod(jbool)
got scala.Boolean true
с: почему не существует неявного преобразования по умолчанию изjava.lang.Boolean
вscala.Boolean
? Вопрос также стоит заjava.lang.Long
противscala.Long
и, возможно, другие стандартные типы (еще не все).