Tôi đang chuyển từ scala 2.7 và ra lệnh scala 2.8 và sử dụng đặt hàng. Nó trông khá thẳng về phía trước nhưng tôi đã tự hỏi tôi có thể làm cho nó một chút ít tiết. Ví dụ:Scala 2.8 TreeMap và thứ tự tùy chỉnh
scala> case class A(i: Int)
defined class A
scala> object A extends Ordering[A] { def compare(o1: A, o2: A) = o1.i - o2.i}
defined module A
Nếu tôi sau đó cố gắng để tạo ra một TreeMap tôi nhận được một lỗi
scala> new collection.immutable.TreeMap[A, String]()
<console>:10: error: could not find implicit value for parameter ordering: Ordering[A]
new collection.immutable.TreeMap[A, String]()
^
Tuy nhiên nếu tôi xác định rõ ràng các đối tượng A như ra lệnh cho nó hoạt động tốt.
scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
Tôi có phải chỉ định rõ ràng thứ tự hoặc có định dạng ngắn hơn không?
Cảm ơn
CẢNH BÁO: so sánh ints bằng cách trừ chúng KHÔNG LÀM VIỆC. Cũng áp dụng cho hầu hết các câu trả lời được đưa ra ở đây. http://stackoverflow.com/questions/2728793/java-integer-what-is-faster-comparison-or-subtraction –
... * iff * ints là * big * và có các dấu hiệu ngược lại. Sau đó, số lượng có thể tràn ra tạo ra kết quả ngược lại do các công tắc dấu hiệu. Nhưng nếu bạn đang làm việc với các con số * rằng * gần với 'Int.MAX_VALUE', bạn đã chơi với lửa, đúng không? Tôi nghĩ rằng "thành ngữ trừ" đặc biệt súc tích/hữu ích trong scala vì scala không có biểu thức điều kiện (ternary) có điều kiện (? :) – kornfridge