2013-05-01 7 views

Odpowiedz

14

Chyba w Scala byłoby użyć wzorca dopasowania osiągnąć takie same np tak:

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

lub, równoważnie:

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

Jeśli typy można wywnioskować, (Int, Int) => Int można usunąć:

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

Wolałbym unikać stosowania dopasowywania wzorców jako zbyt obszernego rozwiązania. Mogę to zaakceptować, jeśli nie ma innego, idiomatycznego podejścia. Czy jest jeden? –

+1

Nie, żebym wiedział ... – ValarDohaeris

+2

@JacekLaskowski - To najlepsze, co dostaniesz. Krotki i parametry metody nie są w pełni zunifikowane i jest to jedno z miejsc, w których można zauważyć. Możesz jednak "def f (p1: Int, p2: Int) = p1 + p2", a następnie '(f _) .tupled", aby utworzyć funkcję, która zajmuje krotkę, mimo że 'def' ma oddzielne parametry. –

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) 
Powiązane problemy