(我正在使用 Scala nightlies,并在 2.8.0b1 RC4 中看到相同的行为。我是 Scala 新手。)
我有两个SortedMap
要组成联合的 s。这是我想使用的代码:
import scala.collection._
object ViewBoundExample {
class X
def combine[Y](a: SortedMap[X, Y], b: SortedMap[X, Y]): SortedMap[X, Y] = {
a ++ b
}
implicit def orderedX(x: X): Ordered[X] = new Ordered[X] { def compare(that: X) = 0 }
}
这里的想法是“隐式”语句意味着X
s 可以转换为s,然后将s 组合成另一个Ordered[X]
是有意义的,而不仅仅是一个映射。SortedMap
SortedMap
当我编译时,我得到
sieversii:scala-2.8.0.Beta1-RC4 scott$ bin/scalac -versionScala compiler version
2.8.0.Beta1-RC4 -- Copyright 2002-2010, LAMP/EPFL
sieversii:scala-2.8.0.Beta1-RC4 scott$ bin/scalac ViewBoundExample.scala
ViewBoundExample.scala:8: error: type arguments [ViewBoundExample.X] do not
conform to method ordered's type parameter bounds [A <: scala.math.Ordered[A]]
a ++ b
^
one error found
如果该类型参数绑定是[A <% scala.math.Ordered[A]]
,而不是[A <: scala.math.Ordered[A]]
. 不幸的是,我什至无法弄清楚“有序”方法的位置!任何人都可以帮我追踪它吗?
如果做不到这一点,我该怎么做才能产生两个SortedMap
s 的并集?如果我删除 combine 的返回类型(或将其更改为Map
)一切正常 --- 但是我不能依赖返回被排序!