我已经阅读了一些关于 Manifests 和允许 Scala 执行诸如“new Array[Array[T]]”之类的操作所需的避免擦除技术,但我对这个有点难过......
我有一种方法可以将数组中的一堆行列成表格,就像电子表格一样。例如想象一个像这样的二维数组:
11, 5, 4
8, 3, 7
2, 1, 4
我写了一个方法来总结该数组的列并吐出一个像 [21, 9, 15] 这样的一维数组
我想将它泛化到 Ints 之外(可能像 Doubles 或 Floats),当我添加参数和清单时,我得到一个编译错误。
这是代码
def sumGrid[T](grid: Array[Array[T]])(implicit m: ClassManifest[T]): Array[T] = {
val sum = new Array[T](grid(0).size)
for(i <- 0 until grid.size) {
for(j <- 0 until grid(0).size) {
sum(j) = sum(j) + grid(i)(j)
}
}
sum
}
这是编译错误:
[ERROR] ...scala/euler/GridOperations.scala:126: error: type mismatch;
[INFO] found : T
[INFO] required: String
[INFO] sum(j) = sum(j) + grid(i)(j)
[INFO] ^
[ERROR] one error found
这里发生了什么?为什么字符串是“必需的”?