在Scala中键入与Array数组不匹配

时间:2014-08-21 15:27:40

标签: arrays scala types

我试图构建一个数组数组,将其作为方法的参数。 内部数组的值是任何类型的数据(AnyVal),例如Int或Double。

该方法的签名如下:

def plot[T <: AnyVal](config:Map[String, String], data:Array[Array[T]]): Unit = {

这是代码:

val array1 = (1 to 10).toArray
val array2 = ArrayBuffer[Int]()
array1.foreach { i =>
  array2 += (getSize(summary, i))
}
val array3 = new Array[Int](summary.getSize())

val arrays = ArrayBuffer[Array[AnyVal]](array1, array2.toArray, array3) # <-- ERROR1
Gnuplotter.plot(smap, arrays.toArray) # <-- ERROR2

但是,我有两个错误:

enter image description here enter image description here

可能出现什么问题?

1 个答案:

答案 0 :(得分:5)

作为可变数据结构的

Array不是协变的(here's why

因此Array[Int]不是Array[AnyVal]的子类型,因此您无法将其传递到预期为Array[AnyVal]的位置。

List会为您做什么吗?

如果性能很重要并且你真的需要使用Array,你可以简单地将所有内容都投射到Array[Any]并完成它。

或者,如果您只需要Array[Any]作为传递给plot函数的最终类型,则可以使用List执行所有操作,并将其转换为toArray[Any]在最后。