マニフェストと、Scala が "new Array[Array[T]]" のようなことを実行できるようにするために必要な消去回避手法について少し読みましたが、これには少し困惑しています....
スプレッドシートのような配列で一連の行を集計する方法があります。たとえば、次のような 2D 配列を想像してください。
11, 5, 4
8, 3, 7
2, 1, 4
その配列の列を合計して [21, 9, 15] のような 1D 配列を吐き出すメソッドを書きました
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
何が起きてる?なぜ文字列が「必要」なのですか?