2013-05-01 11 views

Antwort

14

ich in scala erraten würden Sie Pattern-Matching verwenden das gleiche zu erreichen , z.B wie folgt aus:

val f: (Int, Int) => Int = { case (p1, p2) => p1 } 

oder äquivalent:

def f(p: (Int, Int)) = p match { case(p1, p2) => p1 } 

Wenn die Typen der (Int, Int) => Int geschlossen werden kann, fallen gelassen werden:

List((1, 2), (3, 4)) map { case (p1, p2) => p1 } 
+2

Ich würde eher vermeiden, Mustererkennung als eine zu ausführliche Lösung zu verwenden. Ich kann es jedoch akzeptieren, wenn es keinen anderen, idiomatischen Ansatz gibt. Ist dort eines? –

+1

Nicht, dass ich weiß ... – ValarDohaeris

+2

@JacekLaskowski - Dies ist das Beste, was Sie bekommen werden. Tupel und Methodenparameter sind nicht vollständig vereinheitlicht, und dies ist einer der Orte, an denen Sie bemerken. Sie können jedoch 'def f (p1: Int, p2: Int) = p1 + p2' und dann' (f _). Tupled', um eine Funktion zu erzeugen, die ein Tupel annimmt, obwohl das 'def' separate Parameter verwendet. –

0
def f(p: ((Int, Int), (Int, Int))) = p._1  > f: (p: ((Int, Int), (Int, Int)))(Int, Int) 
f((1,2), (3,4))        > res1: (Int, Int) = (1,2) 
Verwandte Themen