2013-04-14 28 views
5

Tôi có một câu hỏi về thiết kế kiểu. Tại sao Int không mở rộng đặc điểm Ordered. Không phải là Int được sắp xếp theo tự nhiên?Tại sao Int không kế thừa/mở rộng từ Đã đặt hàng [Int]

Thay vào đó, thư viện scala cung cấp các phương thức 'trình tự' ngầm định chuyển Int thành Ordered [Int]. Các lựa chọn thiết kế được thực hiện ở đây là gì?

Ví dụ lấy từ Programming cuốn sách trong Scala

def maxListImpParm[T <% Ordered[T]](elements:List[T]):T= ... 


maxListImpParm(List(1,5,10,3)) // works because of implicit methods 
+0

Tuyên bố có thể được rút ngắn thành: 'def maxListImpParm [T <% Ordered [T]] (phần tử: List [T]): T = ???' –

Trả lời

7

Bởi vì Int (và một số lớp khác kế thừa từ AnyVal) là phù du - khi chạy nó thường thể hiện bằng giá trị nguyên thủy mà không có khái niệm về lớp học (và vì thế thừa kế). Tất nhiên, có những trường hợp ngoại lệ, như Int boxing với đầy đủ các đối tượng lớp tham chiếu thổi khi bạn đặt mục trong bộ sưu tập, nhưng typeclass cung cấp một giải pháp phổ quát. Hơn nữa, typeclasses là more flexible than inheritance.

Các vấn đề liên quan