我正在从 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()
我是否总是必须明确指定顺序或者是否有更短的格式?
Thanks
请注意,有一种稍微不那么冗长的方法来创建Ordering
:
implicit val OrderingA = Ordering.by((_: A).i)
订购的主要优点是您可以为同一类提供许多它们。如果你的A
班级确实是Ordered
,那么你应该扩展它。如果没有,您可以显式传递 Ordering,而不是使用隐式:
new collection.immutable.TreeMap[A, String]()(Ordering.by(_.i))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)