在Scala 2.10中,预计会someDouble.isNaN
包装?运行我的代码通过反编译器调用.isNaN
,我仍然在我的代码中看到double2Double
的调用。鉴于2.10中的新AnyVal
工作,我认为它在运行时不会比java.lang.Double.isNaN(someDouble)
更糟,没有虚假分配。我错过了什么吗?
答案 0 :(得分:7)
不幸的是,isNaN
是java.lang.Double
上的一种方法,必须隐式转换为java.lang.Double
,因此Scala RichDouble
值类无法重新实现{{ 1}}要快,当你使用isNaN
时,你会选择isNaN
。
由于这只会导致java.lang.Double
的测试速度缓慢或笨拙,因此我定义了
NaN
然后我可以使用implicit class RicherDouble(val d: Double) extends AnyVal {
def nan = java.lang.Double.isNaN(d)
}
进行检查。