W Scala 2.10, czy someDouble.isNaN
oczekuje się na pudełko? Uruchamiając mój kod wywołując .isNaN
za pośrednictwem dekompilatora, nadal widzę sygnalizujące wywołania do double2Double
w moim kodzie. Biorąc pod uwagę nowe działanie AnyVal
w wersji 2.10, spodziewałbym się, że nie będzie gorszy niż java.lang.Double.isNaN(someDouble)
w środowisku wykonawczym bez żadnych fałszywych alokacji. Czy czegoś brakuje?Scala 2.10, Double.isNaN i boks
5
A
Odpowiedz
6
Niestety isNaN
to metoda na java.lang.Double
, i ważne jest, aby mieć niejawna konwersja do java.lang.Double
, więc klasa wartość Scala RichDouble
nie może reimplement isNaN
być szybki, a podczas korzystania isNaN
Boxem do java.lang.Double
.
Ponieważ ta pozostawia jedynie spowolnić lub niewygodnych sposobów test dla NaN
, zdefiniować
implicit class RicherDouble(val d: Double) extends AnyVal {
def nan = java.lang.Double.isNaN(d)
}
i wtedy można po prostu użyć .nan
sprawdzić.
Powiązane problemy
- 1. Futures.awaitWszystko w Scala 2.10
- 2. Revised generics in Scala 2.10
- 3. Wyszukiwanie wewnątrz scala 2.10 ASTs
- 4. Jak rozpoznać boks/unboxing w Scala
- 5. Jak używać Scala 2.10 zajęcia ukryte
- 6. Początkujący: alias typu Scala w Scali 2.10?
- 7. Java <-> Konwersje Scala Collection, Scala 2.10
- 8. Embedded Scala Przykład tłumacza REPL dla 2.10
- 9. Jak działa funkcja Double.isNaN()?
- 10. Boks i rozpakowywanie również rzutuje?
- 11. Poszerzenie i boks z java
- 12. Jak rozpoznać boks/rozpakować w dekompilowanym kodzie Scala?
- 13. Jakie możliwości odbicia możemy oczekiwać od Scala 2.10?
- 14. Czy adnotacje klasy Case Scala zmieniły się w 2.10?
- 15. Jak uzyskać sbt-idea do pracy w projekcie scala-2.10?
- 16. Jak ustawić domyślną liczbę wątków dla równoległych kolekcji Scala 2.10?
- 17. Jak używać bagażnika Scala 2.10 z sbt 0.11.0? (Nierozwiązane zależności)
- 18. Auto Boks prymitywów
- 19. Boks, już przeszłość?
- 20. Detect klasę boks
- 21. Typesafe stos i Scala 2,10
- 22. Czy biblioteka Akka Actors jest zainstalowana z Scala IDE dla Scala 2.10?
- 23. Uniwersalny/ogólny boks od Any do AnyRef
- 24. Boks zachowuje się inaczej w C# i VB
- 25. Znajdowanie parametrów typu za pomocą odbicia w Scali 2.10?
- 26. Różnica w spłaszczaniu opcji [Lista [Inten]] w 2.9.1 i 2.10 nocnej
- 27. C# boks enum błąd z rodzajowych
- 28. Dlaczego auto-boks oznaczony jako ostrzeżenie?
- 29. Zastępowanie przestarzałego <: <świadka typu manifestu w Scali 2.10
- 30. Scala 2.10 - Ośmioroowa ucieczka jest przestarzała - jak teraz robić ósemkowo idiomatycznie?
Dlaczego to powinno być szybsze niż boksowanie podwójne? – gzm0
@ gzm0 - Ponieważ to "pola" do klasy wartości (to jest część 'extends AnyVal'), która nie jest faktycznie tworzona, chyba że musisz przekazać ją jako obiekt lub ogólny lub umieścić w tablicy. Jeśli po prostu go użyjesz (tak jak tu jesteś), Scala emituje kod bajtowy, który jest po prostu wywołaniem metody, ponieważ w rzeczywistości nic nie wymaga istnienia realnego obiektu. –
Nie może istnieć wyższy priorytet dla twojego 'RicherDouble', z tą samą nazwą' isNa' na nim? Lub jeśli nie, coś o tym samym priorytecie, aby zawieść z niejednoznacznością, aby przypomnieć sobie, aby nie używać tej metody w ciasnych pętlach. –