Подтвердить что ты не робот

Переключение двух варов в scala

Возможный дубликат:
Объявление параметра Tuple и нечетность присваивания

В python я могу сделать

>>> (a,b) = (1,2)
>>> (b,a) = (a,b)
>>> (a,b)
(2, 1)

Но в scala:

Welcome to Scala version 2.8.1.final (OpenJDK Server VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.

scala> var (a,b) = (1,2)
a: Int = 1
b: Int = 2

scala> (a,b)=(b,a)
<console>:1: error: ';' expected but '=' found.
       (a,b)=(b,a)
            ^

Поэтому, хотя я могу инициализировать vars как кортеж, я не могу назначить их как кортеж. Любой способ обойти это, кроме использования tmp var?

4b9b3361

Ответ 1

К сожалению, нет простого способа. Выражение (a,b) создает неизменяемый объект типа Tuple[Int, Int]. Внутри этого кортежа теряются тождества a и b как изменчивые var. Два предыдущих вопроса могут дать немного больше информации:

Объявление параметра Tuple и нечетность присваивания

Можно ли назначить кортеж для переменных в Scala?

Ответ 2

Это Scala 2.9.0.1

scala> val pair = (1,2)
pair: (Int,Int) = (1,2)

scala> val swappedPair = pair.swap
swappedPair: (Int,Int) = (2,1)

Метод swap создает другой кортеж вместо замены старого, и я не знаю, было ли оно в Scala 2.8.1.