2016-05-06 8 views
0

Gibt es eine Möglichkeit, eine Funktion in scala zu machen, in der ich verschiedene Arten von Parametereingaben eingeben kann? Bitte beachten Sie den folgenden Beispielcode. Ich möchte den folgenden Code zu einer Funktion machen, die verschiedene Datentypen für die Eingabe akzeptiert.Skalafunktion mit verschiedenen Eingangsdatentypen

Beispiel:

/** */ 
def toMatrix(A: Array[Double], m:Int, n:Int): Array[Array[Double]] = { 
    var A_ = Array.apply(A.slice(0,n),A.slice(n*1,n*1+n)) 
    for (i <- 2 to (m-1)){ 
     A_ = A_ ++ Array(A.slice(n*i,(n*i)+n)) 
     } 
    A_ 
} 


/** */ 
def toMatrixInt(A: Array[Int], m:Int, n:Int): Array[Array[Int]] = { 
    var A_ = Array.apply(A.slice(0,n),A.slice(n*1,n*1+n)) 
    for (i <- 2 to (m-1)){ 
     A_ = A_ ++ Array(A.slice(n*i,(n*i)+n)) 
     } 
    A_ 
} 

/** */ 
def toMatrixBoolean(A: Array[Boolean], m:Int, n:Int) = { 
    var A_ = Array.apply(A.slice(0,n),A.slice(n*1,(n*1)+n)) 
    for (i <- 2 to (m-1)){ 
     A_ = A_ ++ Array(A.slice(n*i,(n*i)+n)) 
     } 
    A_ 
} 

Antwort

3

Ja. Und Sie brauchen auch nicht änderbare Variable und hässlich Imperativ Schleifen :) Wenn Sie scala Syntax verwenden, könnte genauso gut einen Moment oder zwei tatsächlich zu lernen, die Sprache mit:/

def toMatrix[T : ClassTag](a: Array[T], m:Int, n:Int) = a.grouped(n).toArray 
1

Offensichtlich Sie sprechen Typ Parametrisierung oder Generika in Java-Welt. Sie sollten gehen und lesen Sie darüber - es gibt eine Menge Informationen im Internet und Bücher zu diesem Thema. Einige Beispiele aus alvinalexander.com:

http://alvinalexander.com/scala/scala-classes-using-generic-types-examples

empfehle ich Ihnen persönlich das Buch Programming in Scala von Martin Odersky et al. Es ist jetzt ein wenig alt, aber es ist perfekt geschrieben und deckt die Sprache gründlich ab.

Verwandte Themen