Trong Scala 2.10, có phải là someDouble.isNaN
được mong đợi đóng hộp không? Chạy mã của tôi gọi .isNaN
thông qua trình giải mã, tôi vẫn thấy các lệnh gọi đến số double2Double
trong mã của tôi. Với mới AnyVal
làm việc trong 2,10, tôi mong đợi nó sẽ không tồi tệ hơn java.lang.Double.isNaN(someDouble)
khi chạy không có phân bổ giả. Tui bỏ lỡ điều gì vậy?Scala 2.10, Double.isNaN và boxing
5
A
Trả lời
6
Thật không may, isNaN
là một phương pháp trên java.lang.Double
, và nó là điều cần thiết để có một chuyển đổi ngầm để java.lang.Double
, vì vậy lớp giá trị Scala RichDouble
không thể reimplement isNaN
để được nhanh chóng, và khi bạn sử dụng isNaN
bạn hộp để java.lang.Double
.
Vì đây lá chỉ cách chậm hoặc vụng về để kiểm tra NaN
, tôi xác định
implicit class RicherDouble(val d: Double) extends AnyVal {
def nan = java.lang.Double.isNaN(d)
}
và sau đó tôi chỉ có thể sử dụng .nan
để kiểm tra.
Các vấn đề liên quan
- 1. chồng typesafe và Scala 2.10
- 2. Scala 2.10 và gói phản chiếu
- 3. Generics generics trong Scala 2.10
- 4. Tài liệu Scala 2.10 macro
- 5. toArray trong Scala 2.10 Milestone
- 6. Tìm kiếm bên trong scala 2.10 ASTs
- 7. Boxing/Unboxing và Nullable?
- 8. Enum Boxing và Bình đẳng
- 9. Sử dụng LabelDef trong các macro scala (2.10)
- 10. Gõ bình đẳng trong API phản xạ Scala 2.10
- 11. Điều gì sắp xảy ra cho scala trong 2.10?
- 12. Làm thế nào để sử dụng Scala 2.10 lớp ngầm
- 13. Java <-> Chuyển đổi bộ sưu tập Scala, Scala 2.10
- 14. Tạo một lớp từ chuỗi và khởi tạo nó trong Scala 2.10
- 15. Boxing & Unboxing
- 16. Làm boxing và unboxing có hiệu suất tương tự?
- 17. vấn đề Java với var-args và boxing
- 18. Scala API 2.10. *: Function2.andSau đó điều gì đã xảy ra?
- 19. Tính năng mới nào (hoặc sẽ được) thêm vào Scaladoc trong Scala 2.10?
- 20. Nội suy chuỗi trong Scala 2.10 - Làm thế nào để nội suy một biến String?
- 21. Tìm tham số kiểu thông qua phản chiếu trong Scala 2.10?
- 22. Chú thích lớp học Scala có thay đổi ở phiên bản 2.10 không?
- 23. Trong Scala 2.10, làm thế nào để bạn tạo một ClassTag cho một TypeTag
- 24. OptManifest và NoManifest của Scala là gì?
- 25. Lỗi có thể xảy ra trong Scala 2.10: Tương lai không chạy
- 26. Scala cải thiện chính xác với kết hợp mẫu trong phiên bản 2.10 là gì?
- 27. Thay thế không được chấp nhận <: <Chứng thực loại khai man trong Scala 2.10
- 28. Java tự động boxing/unboxing wierdness
- 29. Boxing khi sử dụng Generics trong C#
- 30. Sự khác biệt trong việc làm phẳng Tùy chọn [Liệt kê [Int]] trong 2.9.1 và 2.10 mỗi đêm
Tại sao điều này có thể nhanh hơn đấm bốc đôi? – gzm0
@ gzm0 - Bởi vì "hộp" này cho một lớp giá trị (đó là phần mở rộng AnyVal'), không thực sự được tạo trừ khi bạn cần truyền nó như một đối tượng hoặc chung hoặc đặt nó trong một mảng. Nếu bạn chỉ sử dụng nó (như bạn đang ở đây), Scala phát ra bytecode chỉ là một lời gọi phương thức, vì thực sự không có gì đòi hỏi một đối tượng thực sự tồn tại. –
Không thể có mức độ ưu tiên cao hơn cho 'RicherDouble' của bạn, với cùng tên' isNaN' trên đó? Hoặc nếu không, một cái gì đó của cùng một ưu tiên thất bại với sự mơ hồ để nhắc nhở chính mình không sử dụng phương pháp đó trong vòng chặt chẽ. –