2011-10-16 36 views
8

考慮以下幾點:Scala 2.8能正確處理布爾和java.lang.Boolean嗎?

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 

警告說,這將產生false但它產生true

Scala 2.8。

+0

可能對你沒有多大幫助,但scala 2.9.1的行爲與預期相同。 (沒有警告) – Fabian

+0

+1爲lols。也固定在2.9.0。我認爲你可以忽略這個警告。 –

回答

3

有些源代碼控制考古學表明,處理這些警告在2.8.1後得到了改進。以下是針對這些警告的單元測試的註釋修訂。

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

這相比2.8.1最終修訂版,以19169這是一個很大的基礎:

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

我覺得這給人一種感覺,更多的注意力後,這提供2.8.1。

看看一些錯誤報告,看起來警告真的只是 - 希望有助於識別錯誤。如果你知道自己在做什麼(比如比較java布爾值和布爾值),那麼你可以忽略它。

1

有趣的是,這已經倒退了。在最近的警告增強功能中,我必須排除數字和缺少布爾值。在trunk中用於比較java.lang.Boolean和Boolean的錯誤信息令人印象深刻。

+0

糟糕,這意味着作爲評論huynhjl的答案。 – extempore