java.lang. Булевы для скалы. Булевы вопросы - PullRequest
9 голосов
/ 19 мая 2011
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 и, возможно, другие стандартные типы (не пробовал все из них).

1 Ответ

12 голосов
/ 19 мая 2011

В 2.9 есть такое преобразование, по-видимому, чтобы помочь взаимодействию с Java. (Scala сам по себе не нужен, потому что он прозрачно упаковывает и распаковывает примитивы, возможно, поэтому он не был включен ранее.)

...