Доступны ли входные параметры деструктурирования в Scala? Есть ли способ разрушить входные параметры функции в Scala (сродни Clojure)? Итак, вместо scala> def f(p: (Int, Int)) = p._1 f: (p: (Int, Int))Int Я хотел бы иметь это (это не работает): scala> def f((p1, p2): (Int, Int)) = p1 Ответ 1 Я думаю, что в scala вы использовали бы совпадение шаблонов для достижения того же самого, например. например: val f: (Int, Int) => Int = { case (p1, p2) => p1 } Или, что эквивалентно: def f(p: (Int, Int)) = p match { case(p1, p2) => p1 } Если типы могут быть выведены, (Int, Int) => Int можно отбросить: List((1, 2), (3, 4)) map { case (p1, p2) => p1 } Ответ 2 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)
Ответ 1 Я думаю, что в scala вы использовали бы совпадение шаблонов для достижения того же самого, например. например: val f: (Int, Int) => Int = { case (p1, p2) => p1 } Или, что эквивалентно: def f(p: (Int, Int)) = p match { case(p1, p2) => p1 } Если типы могут быть выведены, (Int, Int) => Int можно отбросить: List((1, 2), (3, 4)) map { case (p1, p2) => p1 }
Ответ 2 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)