在python中,我可以做到
>>> (a,b) = (1,2)
>>> (b,a) = (a,b)
>>> (a,b)
(2, 1)
但是在斯卡拉:
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?
之外,还有什么方法可以解决这个问题答案 0 :(得分: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)
方法swap
生成另一个元组而不是更改旧元组,我不知道它是否存在于Scala 2.8.1中。
答案 1 :(得分:6)
不幸的是,没有简单的方法。表达式(a,b)
构造了Tuple[Int, Int]
类型的不可变对象。在此元组中,a
和b
作为可变var
的标识将丢失。之前的两个问题可能会提供更多信息:
Tuple parameter declaration and assignment oddity
Is it possible to have tuple assignment to variables in Scala?