Scala比较类型:排序

Scala比较类型:排序,scala,types,compare,Scala,Types,Compare,我有这样一个排序功能: def sort[A:Ordering](vals: Array[A]):Array[A] = { for (i <- 1 until vals.length) { val temp = vals(i) var j = i while (j > 0 && temp < vals(j-1) ){ vals(j) = vals(j-1) j -= 1 } vals(j) = temp; } vals }

我有这样一个排序功能:

def sort[A:Ordering](vals: Array[A]):Array[A] = {
for (i <- 1 until vals.length) {
  val temp = vals(i)
  var j = i
  while (j > 0 && temp < vals(j-1) ){
    vals(j) = vals(j-1)
    j -= 1
  }
  vals(j) = temp;
}
vals
}

它应该得到一个类型为a的数组,它是Int或String,但是代码不知道它是一个参数,并对它进行排序,然后返回它。 现在eclipse告诉我:

值<不是类型参数a的成员

在第5行。我不明白为什么它不能比较这些值,我试过A:可比较,A:有序和A:每一个可能有用的词。什么都不管用

感谢您的帮助! 谢谢

函数sort上的[A:Ordering]意味着应该存在这样的隐式值,老实说,它可能不是隐式的,但在这种情况下,您必须手动传递它,它在sort调用时具有类型Ordering[A],并且该隐式值将添加到函数的单独参数列表中

这就是Scala支持的方式


这不会神奇地增加你非常感谢!我决不会想出那样的办法!现在在我代码的另一部分,我有这样一个:var arr=Array.ofDim[A]size,它说A没有可用的类标记。这与上面的解决方案有关吗?@OuTsei这是另一个问题。谷歌关于类标签的信息以及如何处理Scala中的类型擦除。我仍然无法让它工作。在其他失败中,我尝试过:var arr=Array.ofDim[Ordering[A]]size和eclipse似乎可以接受,但它的类型是错误的。arr应为数组[A]
implicitly[Ordering[A]]
scala> def lt[T : Ordering](a: T, b: T) = { implicitly[Ordering[T]].lt(a, b) }
lt: [T](a: T, b: T)(implicit evidence$1: Ordering[T])Boolean

scala> lt(1, 1)
res9: Boolean = false

scala> lt(1, 2)
res10: Boolean = true