2013-05-01 9 views

risposta

14

Credo che in scala si può usare il pattern matching per ottenere lo stesso , per esempio in questo modo:

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

o, equivalentemente:

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

Se i tipi possono essere dedotte, il (Int, Int) => Int può essere eliminato:

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

Preferisco evitare di usare la corrispondenza dei pattern come una soluzione troppo prolissa. Posso accettarlo, però, se non c'è altro approccio idiomatico. Ce n'è uno? –

+1

Non che io sappia ... – ValarDohaeris

+2

@JacekLaskowski - Questo è il meglio che otterrai. Le tuple ei parametri del metodo non sono completamente unificati e questo è uno dei punti in cui si nota. Potete comunque def def (p1: Int, p2: Int) = p1 + p2' e poi '(f _) .tupled' per creare una funzione che prende una tupla anche se' def' ha preso parametri separati. –

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) 
Problemi correlati