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

pro*_*eek 1 arrays types scala

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

该方法的签名如下:

def plot[T <: AnyVal](config:Map[String, String], data:Array[Array[T]]): Unit = {
Run Code Online (Sandbox Code Playgroud)

这是代码:

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
Run Code Online (Sandbox Code Playgroud)

但是,我有两个错误:

在此输入图像描述 在此输入图像描述

可能有什么问题?

Gab*_*lla 5

Array,作为一个可变数据结构,是不协变的(这就是为什么)

因此,Array[Int]它不是一个子类型Array[AnyVal],因此您不能将它传递到Array[AnyVal]预期的位置.

List为你做的吗?

如果性能很重要并且您确实需要使用Array,您可以简单地将所有内容都投入使用Array[Any]并完成.

或者,如果您只需要一个Array[Any]作为最终类型传递给plot函数,您可以使用List,并toArray[Any]在最后转换它.