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来解决这个问题,但这会使我的方法不那么灵活。
答案 0 :(得分:2)
scala.collection.mutable.Seq
将允许您按索引访问和修改Array
和ArrayBuffer
。
注意:现在不推荐使用视图绑定语法,您可以使用隐式参数实现相同的功能:
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
有一个隐式转换,所以它可以正常工作。