Ich habe eine Funktion, die classTag verwendet, anstatt explizit den Datentyp eines Eingabeparameters zu definieren.classTag scala mit map
Zum Beispiel
def getColMult[T: ClassTag](A: Array[T], cols: Array[Int]): Array[Array[Double]] = {
if (cols.size == 1) {
var C = Array.apply(A.map{_(cols(0))})
C.transpose
}
else {
var C = Array.apply(A.map{_(cols(0))},A.map{_(cols(1))})
for (i <- (2 to cols.size - 1)) {
C = C++ Array(A.map{_(cols(i))})
}
C.transpose
}
}
auf die Funktion ausgeführt wird, dies würde diesen Fehler:
Name: Kompilierfehler Nachricht:: 35: Fehler: T Parameter var C nicht statt = Array.apply (A.map (_ (cols (0))})
Konsole: 39: Fehler:. T nehmen keine Parameter var C = Array.apply (A.map {(cols (0))}, A.map { (cols (1))})
Was versuchen Sie mit dieser Linie zu tun? –
Ich versuche, eine bestimmte Spalte von einem Array [Array [Double]] zu erhalten A. Wenn ich nur eine Spalte abrufen muss, verwende ich diese Zeile A.map {_ (cols (0))} Ausgabe eines Arrays von Double entsprechend dieser Spalte. Um es als array Array zu machen, muss ich die apply-Funktion in scala verwenden. Wenn ich mehrere Spalten haben soll, muss ich Schleifen verwenden. –
Aber 'T' ist nicht unbedingt ein' Array'. Der Compiler weiß also, dass das '_' in' A.map (...) 'alles sein kann. –