2011-10-16 29 views
8

xem xét như sau:Scala 2.8 xử lý Boolean và java.lang.Boolean đúng cách?

scala> val a:java.lang.Boolean = true 
a: java.lang.Boolean = true 

scala> val b = true 
b: Boolean = true 

scala> a == b 
res4: Boolean = true 

scala> b == a 
<console>:8: warning: comparing values of types Boolean 
and java.lang.Boolean using `==' will always yield false 
     b == a 
     ^
res5: Boolean = true 

Cảnh báo nói rằng nó sẽ mang lại false nhưng nó mang lại true.

Scala 2.8.

+0

Có thể sẽ không giúp bạn nhiều nhưng scala 2.9.1 hoạt động như mong đợi. (không có cảnh báo) – Fabian

+0

+1 cho lols. Cũng được sửa trong 2.9.0. Tôi nghĩ bạn có thể bỏ qua cảnh báo này. –

Trả lời

3

Một chút về khảo cổ mã nguồn kiểm soát cho thấy việc xử lý các cảnh báo đó đã được cải thiện sau 2.8.1. Dưới đây là các sửa đổi có chú thích cho các bài kiểm tra đơn vị cho những cảnh báo đó.

https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/neg/checksensible.scala?annotate=blame&rev=25638

này được so sánh với rev 19.169 trong 2.8.1 thức đó là rất nhiều cơ bản hơn:

https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_1_final/test/files/neg/checksensible.scala

Tôi nghĩ rằng điều này mang lại một cảm giác rằng sự chú ý nhiều hơn được cung cấp cho này sau 2.8.1.

Nhìn vào một số báo cáo lỗi, có vẻ như cảnh báo thực sự chỉ là vậy - hy vọng giúp xác định lỗi. Nếu bạn biết những gì bạn đang làm (chẳng hạn như so sánh java Boolean và scala Boolean), thì bạn có thể bỏ qua.

1

Điều thú vị là điều này đã bị thoái lui. Trong các cải tiến cảnh báo gần đây tôi phải loại trừ số học và thiếu boolean. Thông báo lỗi trong thân cây để so sánh java.lang.Boolean và Boolean gây nhầm lẫn ấn tượng.

+0

Rất tiếc, có nghĩa là nhận xét về câu trả lời của huynhjl. – extempore

Các vấn đề liên quan