Scala Tuple Deconstruction - PullRequest
       4

Scala Tuple Deconstruction

22 голосов
/ 06 мая 2010

Я новичок в Scala, и наткнулся на небольшой сбой, который меня раздражал.

Инициализация двух переменных параллельно работает отлично: var (x,y) = (1,2)

Однако я не могу найти способ назначать новые значения параллельно: (x,y) = (x+y,y-x) //invalid syntax

В итоге я пишу что-то вроде этого: val xtmp = x+y; y = x-y; x = xtmp

Я понимаю, что написание функционального кода - один из способов избежать этого, но в некоторых ситуациях переменные имеют больше смысла.

У меня два вопроса:

1) Есть ли лучший способ сделать это? Я что-то упустил?

2) По какой причине не разрешено истинное параллельное назначение?

Ответы [ 2 ]

22 голосов
/ 06 мая 2010

К сожалению, вы не можете выполнять несколько заданий в Scala. Но вы можете использовать кортежи, если они соответствуют вашей проблеме:

scala> var xy = (1,2)
xy: (Int, Int) = (1,2)

scala> xy = (xy._1 + xy._2, xy._2 - xy._1)
xy: (Int, Int) = (3,1)

Таким образом, xy - это один кортеж с двумя значениями. Первое значение можно получить с помощью xy._1, второе - с помощью xy._2.

1 голос
/ 06 мая 2010

Scala имеет 2 типа переменных: vals и vars.Vals похожи на конечные переменные Java, поэтому, насколько я понимаю, из того, что вы спрашиваете, единственный способ назначать новые значения параллельно vals:*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...