Scala 2.8正确处理Boolean和java.lang.Boolean?

时间:2011-10-16 09:40:12

标签: scala scala-2.8

请考虑以下事项:

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。

2 个答案:

答案 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决赛中的rev 19169相比,它更基本:

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

我认为这给人一种感觉,即在2.8.1之后为此提供了更多关注。

看一些错误报告,警告似乎就是这样 - 希望有助于识别错误。如果您知道自己在做什么(例如比较java Boolean和scala布尔值),那么您可以忽略。

答案 1 :(得分:1)

有趣的是,这已经退步了。在最近的警告增强中,我必须排除数字和缺少布尔值。用于比较java.lang.Boolean和Boolean的trunk中的错误消息令人印象深刻。