Przełączam się z wersji 2.7 i zamawiam na scala 2.8 i zamawiam. Wygląda to dość prosto, ale zastanawiałem się, czy mogę sprawić, że będzie trochę mniej gadatliwy. Na przykład:Scala 2.8 TreeMap i niestandardowe zamówienie
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
Gdybym następnie spróbuj utworzyć TreeMap pojawia się błąd
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]()
^
Jednak jeśli jawnie określić Object jako zamawiania działa dobrze.
scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
Czy zawsze muszę jednoznacznie określić zamówienie lub czy istnieje krótszy format?
Dzięki
OSTRZEŻENIE: porównanie ints przez ich odjęcie NIE DZIAŁA. Dotyczy również większości odpowiedzi tutaj podanych. http://stackoverflow.com/questions/2728793/java-integer-what-is-faster-comparison-or-subtraction –
... * iff * ints są * duże * i mają przeciwne znaki. Liczba może następnie przepełnić, dając odwrotny wynik, ponieważ znak się przełącza. Ale jeśli pracujesz z liczbami *, które * zbliżają się do 'Int.MAX_VALUE', to już grasz z ogniem, prawda? Myślę, że odejmowanie "idiomu" jest szczególnie zwięzłe/użyteczne w scala, ponieważ scala nie ma (trójskładnikowych) wyrażeń warunkowych (? :) – kornfridge