Ответ 1
К сожалению, нет простого способа. Выражение (a,b)
создает неизменяемый объект типа Tuple[Int, Int]
. Внутри этого кортежа теряются тождества a
и b
как изменчивые var
. Два предыдущих вопроса могут дать немного больше информации:
Возможный дубликат:
Объявление параметра 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?
К сожалению, нет простого способа. Выражение (a,b)
создает неизменяемый объект типа Tuple[Int, Int]
. Внутри этого кортежа теряются тождества a
и b
как изменчивые var
. Два предыдущих вопроса могут дать немного больше информации:
Это 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.