在scala中交换两个变量

geo*_*org 10 functional-programming scala

可能重复:
元组参数声明和赋值奇怪

在python我能做到

>>> (a,b) = (1,2)
>>> (b,a) = (a,b)
>>> (a,b)
(2, 1)
Run Code Online (Sandbox Code Playgroud)

但在斯卡拉:

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)
            ^
Run Code Online (Sandbox Code Playgroud)

因此,虽然我可以将vars初始化为元组,但我不能将它们指定为元组.有什么方法可以解决这个问题,除了使用tmp var?

agi*_*eel 13

这是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)
Run Code Online (Sandbox Code Playgroud)

该方法swap生成另一个元组而不是更改旧元组,我不知道它是否存在于Scala 2.8.1中.

  • 是的,它存在于2.8中,但这只返回一个交换的元组.所以交换vars的id的问题没有解决. (2认同)

Kip*_*ros 6

不幸的是,没有简单的方法.该表达式(a,b)构造一个类型的不可变对象Tuple[Int, Int].在这个元组的身份ab作为可变vars的丢失.之前的两个问题可能会提供更多信息:

元组参数声明和赋值奇数

是否可以在Scala中对变量进行元组赋值?