Я переключаюсь с scala 2.7 и заказываю scala 2.8 и используя заказ. Это выглядит совершенно прямо, но мне было интересно, могу ли я сделать это немного менее подробным. Например:Scala 2.8 TreeMap и пользовательский заказ
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
Если я затем попытаться создать TreeMap я получаю ошибку
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]()
^
Однако, если я явно указать объект А, как приказывать его прекрасно работает.
scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
Должен ли я всегда указывать заказ или есть более короткий формат?
Благодаря
ПРЕДУПРЕЖДЕНИЕ: сравнение ints путем вычитания их НЕ РАБОТАЕТ. Также применяется к большинству ответов, приведенных здесь. http://stackoverflow.com/questions/2728793/java-integer-what-is-faster-comparison-or-subtraction –
... * iff * ints * big * и имеют противоположные знаки. Затем число может переполняться, что дает противоположный результат, поскольку знак переключается. Но если вы работаете с цифрами *, которые * близки к 'Int.MAX_VALUE', вы уже играете с огнем, не так ли? Я думаю, что вычитающая «идиома» особенно красноречива/полезна в scala, поскольку scala не имеет (тройных) условных выражений (? :) – kornfridge