In Scala 2.10, ist someDouble.isNaN
Box erwartet? Wenn ich meinen Code lese, der .isNaN
durch einen Decompiler aufruft, sehe ich immer noch verräterische Aufrufe an double2Double
in meinem Code. Angesichts der neuen AnyVal
Arbeit in 2.10, würde ich erwarten, dass es nicht schlechter als zur Laufzeit ohne störende Zuordnungen ist. Fehle ich etwas?Scala 2.10, Double.isNaN und Boxen
5
A
Antwort
6
Leider ist isNaN
ein Verfahren auf java.lang.Double
, und es ist wichtig, eine implizite Konvertierung zu java.lang.Double
haben, so dass der Scala RichDouble
Wertklasse nicht isNaN
schnell sein reimplementieren können, und wenn Sie isNaN
Sie Kasten zu java.lang.Double
.
Da dies nur langsam oder umständlich Wege verlässt für NaN
zu testen, definiere ich
implicit class RicherDouble(val d: Double) extends AnyVal {
def nan = java.lang.Double.isNaN(d)
}
und dann kann ich nur .nan
verwenden zu überprüfen.
Verwandte Themen
- 1. Typesafe Stack und Scala 2.10
- 2. Scala 2.10 TypeTag Verwendung
- 3. Dokumentieren Scala 2.10 Makros
- 4. Paket Kompatibilität zwischen Scala 2.10 und 2.11
- 5. Anfänger: Scala-Typ Alias in Scala 2.10?
- 6. Fehler in Scala 2.10, Iterator.size?
- 7. Suchen in scala 2.10 ASTs
- 8. Haben sich Scala-Fallklassenanmerkungen in 2.10 geändert?
- 9. Typ einer Fallklasse in Scala Aliasing 2.10
- 10. Java <-> Scala Sammlung Konvertierungen, Scala 2.10
- 11. Mit Scala 2.10 `to` Liste in SortedMap
- 12. So verwenden Scala 2.10 implizite Klassen
- 13. Embedded Scala REPL Interpreter Beispiel für 2.10
- 14. Convert scala 2.10 Zukunft zu scalaz.concurrent.Future // Aufgabe
- 15. Wie reflektiere ich Anmerkungen in Scala 2.10?
- 16. Wie funktioniert Double.isNaN()?
- 17. Generieren einer Klasse aus String und Instanziieren in Scala 2.10
- 18. Interoperation zwischen Java-Bibliothek Args4j und Scala 2.10
- 19. Java Interoperabilität Elende mit Scala Generika und Boxen
- 20. Scala API 2.10. *: Function2.andThen was ist passiert?
- 21. Workaround für einen scala.language.dynamics Bug in Scala 2.10 Compiler
- 22. Typ Parameter über Reflexion in Scala 2.10 zu finden?
- 23. Scala 2.10: Konvertieren veränderbare Map of ListBuffer in schreibgeschützte Datenstruktur
- 24. Geben Sie die Gleichheit in der Scala 2.10 Reflection API
- 25. Was genau hat Scala mit Pattern Matching in 2.10 verbessert?
- 26. Laufzeitauflösung von Typ Argumente mit scala 2.10 Reflexion
- 27. Möglicher Fehler in Scala 2.10: Futures laufen nicht
- 28. Structs, Interfaces und Boxen
- 29. Java: Boxen und mit ==
- 30. Boxen und Unboxing Konzept
Warum sollte das schneller sein als das Double? – gzm0
@ gzm0 - Weil diese "Boxen" zu einer Wertklasse (das ist der "AnyVal" Teil erweitert), die nicht wirklich erstellt wird, es sei denn, Sie müssen es als Objekt oder Generic übergeben oder in ein Array einfügen. Wenn Sie es nur benutzen (wie Sie hier sind), sendet Scala einen Bytecode aus, der nur ein Methodenaufruf ist, da es eigentlich nichts gibt, was die Existenz eines realen Objekts erfordert. –
Könnte es nicht eine höhere Priorität für Ihr 'RicherDouble' geben, mit demselben' isNaN' Namen? Oder wenn nicht, etwas mit der gleichen Priorität mit Zweideutigkeit versagen, um sich daran zu erinnern, diese Methode nicht in engen Schleifen zu verwenden. –