Các tài liệu scala nói rằng Enumeration.Val có trật tự, tuy nhiên tôi nhận được hành vi không phù hợp khi khi tôi cố gắng để thực thi hạn chế loại trên các giá trị liệt kê yêu cầu họ hỗ trợ đặt hàng:Giá trị liệt kê Scala không được đặt hàng?
object Dogs extends Enumeration {
val Sam, Tom, Rover = Value
}
def doSomething[A <% Ordered[A]](a : List[A]) : Unit = {
println(a.sortWith(_ < _))
}
import Dogs._
val xs = List(Rover, Tom, Sam, Sam, Rover)
println(xs.sortWith(_ < _)) // works!
doSomething(xs) // fails =(
Trong hai báo cáo cuối cùng, là người đầu tiên hoạt động và hiển thị rằng các giá trị liệt kê có một thứ tự được xác định. Trường hợp thứ hai đưa ra một lỗi:
could not find implicit value for evidence parameter of type (this.Dogs.Value) => Ordered[this.Dogs.Value]
Làm cách nào để nhận được thông tin này và sử dụng các giá trị liệt kê theo các phương pháp chung mà yêu cầu đặt hàng?
Cảm ơn @retronym, ví dụ cuối cùng này đã giải quyết được vấn đề của tôi, mặc dù tâm trí của tôi đang bị hạn chế về các loại ràng buộc yếu hơn! Nó bây giờ yêu cầu bất kỳ loại A, cung cấp A có thể được coi là (tức là, hoặc có thể được chuyển đổi sang) một cái gì đó Đặt hàng bằng một tổng quát của A. Đó có phải là về đúng không? –