Доступны ли входные параметры деструктурирования в 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)