Estoy cambiando de scala 2.7 y pedido a scala 2.8 y utilizando pedidos. Parece bastante directo, pero me preguntaba si podría hacerlo un poco menos detallado. Por ejemplo:Scala 2.8 TreeMap y pedido personalizado
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
si yo intento crear una TreeMap consigo un error
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]()
^
Sin embargo, si puedo especificar explícitamente el objeto A como el ordenar que trabaja muy bien.
scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
¿Siempre tengo que especificar explícitamente el pedido o hay un formato más corto?
Gracias
ADVERTENCIA: la comparación de las entradas restando NO FUNCIONA. También se aplica a la mayoría de las respuestas dadas aquí. http://stackoverflow.com/questions/2728793/java-integer-what-is-faster-comparison-or-subtraction –
... * iff * las entradas son * grandes * y tienen signos opuestos. El número puede desbordarse produciendo el resultado opuesto ya que el signo cambia. Pero si está trabajando con números * que * están cerca de 'Int.MAX_VALUE', ya está jugando con fuego, ¿verdad? Creo que la resta de "idiom" es particularmente conciso/útil en scala ya que scala no tiene (ternary) expresiones condicionales (? :) – kornfridge