2011-05-19 31 views
9
[email protected]:~$ 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 

Câu hỏi đặt ra là: tại sao không có chuyển đổi ngầm định mặc định từ java.lang.Boolean thành scala.Boolean? Câu hỏi này cũng là viết tắt của java.lang.Long vs scala.Long và có lẽ các loại tiêu chuẩn khác (chưa thử tất cả chúng).java.lang.Boolean to scala.Boolean question

Trả lời

12

Trong phiên bản 2.9, có một chuyển đổi như vậy, có lẽ là để hỗ trợ khả năng tương tác với Java. (Scala không cần nó một mình, bởi vì nó trong suốt hộp và unboxes nguyên thủy, có lẽ là lý do tại sao nó không được bao gồm trước đó.)