【发布时间】:2010-04-21 14:35:56
【问题描述】:
我正在从 scala 2.7 切换并订购到 scala 2.8 并使用订购。它看起来很简单,但我想知道我能否让它不那么冗长。例如:
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]()
^
但是,如果我将对象 A 明确指定为排序,它就可以正常工作。
scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
我是否总是必须明确指定顺序,还是有更短的格式?
谢谢
【问题讨论】:
-
警告:通过减去整数来比较整数不起作用。也适用于此处给出的大多数答案。 stackoverflow.com/questions/2728793/…
-
... iff 整数是 big 并且具有相反的符号。由于符号切换,该数字可能会溢出,从而产生相反的结果。但是,如果您使用的数字 接近
Int.MAX_VALUE,那么您已经在玩火了,不是吗?我认为减法“成语”在 scala 中特别简洁/有用,因为 scala 没有(三元)条件表达式 (?:) -
@kornfridge Scala 确实有条件表达式。语法是: if( condition ) valueIfTrue else valueIfFalse 。现在,如果使用符号? and : 而不是 "if(" 和 ") else" 是一个要求,那么不,Scala 没有条件表达式。