Вы видите здесь ограниченную версию сопоставления с образцом при инициализации переменных. Обратите внимание, что это работает не только для кортежей:
val a :: b = List(1,2,3)
println(a) //1
println(b) //List(2, 3)
Эта функция заимствована непосредственно из Haskell, где вы также можете использовать шаблоны для инициализации:
let (a,b) = getTuple
in a*b
Поскольку у Haskell нет изменяемых данных, нет способа присвоить что-либо.
В Scala вы могли бы сделать что-то подобное, но я думаю, это было слишком запутанным или, возможно, слишком сложным для реализации. Вы всегда можете использовать выражение match
как обычно, и часто вам нужно просто case
, например, List((1,2),(3,4)).map{ case (a,b) => a*b }
.