Khi thực hiện một cấu trúc dữ liệu sắp xếp được, tôi đã nghĩ đến việc làm một cái gì đó như thế này:Loại tham số T giáp đặt hàng [T]
trait MaxHeap[T <: Ordering[T]] {
def insert(e: T): Unit
...
}
Nhưng điều đó sẽ không làm việc với nhiều loại như MaxHeap [Int]. Trong thư viện bộ sưu tập tiêu chuẩn, loại phần tử T của tập hợp không bị chặn. Thay vào đó, một ngầm định được cung cấp cho các phương thức cần nó để chuyển đổi T thành Đặt hàng [T], ví dụ:
trait Seq[+A] extends ... {
// it's Ordering[B], not Ordering[A], but the idea is the same.
def max[B >: A](implicit cmp: Ordering[B]): A
}
Câu hỏi của tôi là, nếu có nhiều phương pháp trong lớp học của tôi/đặc điểm liên quan đến so sánh, có cách nào để xác định loại nguyên tố lớp/đặc điểm để có thể so sánh được vì vậy mà tôi không cần phải khai báo implicits cho những phương pháp?
Cảm ơn bạn @Petr. Nhưng theo cách này, 'T' không được thi hành để có thể so sánh được như thể nó đã được giới hạn trong danh sách tham số kiểu. Bất kỳ 'T' sẽ làm, cung cấp một tiềm ẩn được đưa ra. – cfchou
'Đặt hàng [_>: T]' là một kỹ thuật mà tôi chưa từng thấy trước đây. Nhưng tôi tự hỏi tại sao không sử dụng 'Ordering [T]'. Các toán tử thuận tiện như '>' được cung cấp gián tiếp bởi 'Ordering.Implicits' dường như không hoạt động với' Ordering [_>: T] '. – cfchou
@cfchou Tôi cập nhật câu trả lời để giải quyết các nhận xét của bạn. –