Tôi đang cố gắng sử dụng> =,>, v.v. với DateTime (joda), và cách duy nhất tôi có thể làm cho nó hoạt động chuyển đổiKhông thể cung cấp chuyển đổi ngầm từ DateTime thành Ordered bằng cách sử dụng chuyển đổi ẩn thành Comparable
implicit def dateTime2ordered(x: DateTime): Ordered[DateTime] =
new Ordered[DateTime] with Proxy {
val self = x
def compare(y: DateTime): Int = {
x.compareTo(y)
}
}
tôi có vẻ rất muốn một hình thức chung chung hơn như
implicit def comparable2ordered[A <: Comparable[A]](x: A): Ordered[A] =
new Ordered[A] with Proxy {
val self = x
def compare(y: A): Int = {
x.compareTo(y)
}
}
Nhưng trình biên dịch không thể tìm thấy chuyển đổi này, và sau khi cố gắng gọi nó trực tiếp, tôi đã nhận được thông báo sau tuyên bố rằng DateTime không thuộc loại Comparable [A]. Sau khi kiểm tra nguồn cho DateTime, tôi thấy rằng nó chỉ thực hiện Comparable như một kiểu thô.
tôi đã có thể để có được nó hoạt động sử dụng
implicit def comparable2ordered[A <: Comparable[_]](x: A): Ordered[A] =
new Ordered[A] with Proxy {
val self = x
def compare(y: A): Int = {
x.compareTo(y)
}
}
Câu hỏi của tôi là: Đây có phải là điều trị Scala đúng đắn về vấn đề này, hoặc các loại ký tự đại diện sẽ bị ràng buộc gây ra các vấn đề trong tương lai với kiểm tra kiểu?
Tôi nghĩ rằng điều này hoạt động: 'import com.github.nscala_time.time.Imports._' – Chris
Vâng, nó hoạt động, nhưng chỉ khi bạn đang sử dụng thư viện thời gian nscala. ;) –
Tôi thích giải pháp "Mở rộng Đặt hàng": ngắn gọn và gọn gàng và giữ "ma thuật" ở mức tối thiểu – Integrator