编写泛型函数以接受Array和ArrayBuffer

时间:2017-03-26 07:41:30

标签: arrays scala

def foo[T <% Ordered[T]](array: Array[T], x: T) = {
      ........
}

所以使用foo我希望它同时包含Array和ArrayBuffer。但是当我尝试传递一个ArrayBuffer时,我得到了一个类型错误匹配

main.scala:67: error: type mismatch;
 found   : scala.collection.mutable.ArrayBuffer[Int]

我可以通过将数组参数设置为ArrayBuffer而不是Array来解决这个问题,但这会使我的方法不那么灵活。

2 个答案:

答案 0 :(得分:2)

scala.collection.mutable.Seq将允许您按索引访问和修改ArrayArrayBuffer

注意:现在不推荐使用视图绑定语法,您可以使用隐式参数实现相同的功能:

def foo[T](array: scala.collection.mutable.Seq[T], x: T)(implicit ordering: Ordering[T]) = {
if (ordering.gt(array(0), x)) {
  array.update(0, x)
}

}

您可以在SI-7629(https://issues.scala-lang.org/browse/SI-7629

中找到更多相关信息

希望有所帮助,

由于

答案 1 :(得分:1)

你可以写

def foo[T <% Ordered[T]](seq: Seq[T], x: T) = ???

ArrayBuffer确实是Seq的一个实现,Array有一个隐式转换,所以它可以正常工作。