2017-11-21 7 views
1

Kann ich eine Funktion in Scala erstellen, die sowohl Vektoren als auch Listen akzeptiert, ohne den konkreten Typ anzugeben?Scala generische Methode. Akzeptieren Sie eine beliebige Folge numerischer Werte

Ich habe jetzt so etwas wie dieses:

def testFunc[V <: Seq[Int]](x: V) = x 

testFunc(List(1, 3)) // res0: List[Int] = List(1, 3) 
testFunc(Vector(1, 3)) // res1: scala.collection.immutable.Vector[Int] = Vector(1, 3) 

Wie kann ich diese Funktionen ändern, damit es akzeptiert auch Double und Int Werte?

Antwort

1

können wir die Methode ein wenig für jeden einstelligen Typkonstruktor verallgemeinern und die Art Wiederholungen vermeiden (können Sie eine Einschränkung für F[_] <: Seq[_] hinzufügen, wenn Sie möchten):

def testFunc[F[_], A : Numeric](x: F[A]): F[A] = x 

Und dann Typinferenz für uns arbeitet, :

val resFirst = testFunc(Seq(1.0,2.0,3.0)) 
val resSecond = testFunc(List(1,2)) 
+0

Ah .. Also muss ich die Typen beim Aufruf der Funktion angeben. Danke, ich konnte nicht in den Dokumenten finden. – ritchie46

+0

@ ritchie46 Ja, Tipp Inferenz .. –

+1

@ ritchie46 Siehe mein Update, es macht die Methode Aufruf schöner. –

Verwandte Themen