In Scala 2.10, is someDouble.isNaN
expected to box? Running my code calling .isNaN
through a decompiler, I still see telltale calls to double2Double
in my code. Given the new AnyVal
work in 2.10, I'd expect it to be no worse than java.lang.Double.isNaN(someDouble)
at runtime with no spurious allocations. Am I missing something?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Unfortunately, isNaN
is a method on java.lang.Double
, and it is essential to have an implicit conversion to java.lang.Double
, so the Scala RichDouble
value class cannot reimplement isNaN
to be fast, and when you use isNaN
you box to java.lang.Double
.
Since this leaves only slow or awkward ways to test for NaN
, I define
implicit class RicherDouble(val d: Double) extends AnyVal {
def nan = java.lang.Double.isNaN(d)
}
and then I can just use .nan
to check.