Scala 2.8是否正确处理布尔值和java.lang.Boolean?

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。

可能不会对你有太大帮助,但是Scala 2.9.1的行为符合预期(没有警告)。 - Fabian
+1 笑。在 2.9.0 中已经修复了。我认为你可以忽略这个警告。 - Luigi Plinge
2个回答

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布尔值和scala布尔值),那么你可以忽略它们。

1

有趣的是,这已经退化了。在最近的警告增强中,我必须排除数字和缺失的布尔值。 在主干版本中比较java.lang.Boolean和Boolean的错误消息非常令人困惑。


哎呀,我的意思是将其作为对huynhjl答案的评论。 - psp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接