Scala 标量元组解构

Scala 标量元组解构,scala,Scala,我是Scala的新手,遇到了一个让我恼火的小问题 并行初始化两个变量非常有效:var(x,y)=(1,2) 但是,我找不到一种并行分配新值的方法:(x,y)=(x+y,y-x)//语法无效 我最后写了这样的东西:valxtmp=x+y;y=x-y;x=xtmp 我意识到编写函数代码是避免这种情况的一种方法,但在某些情况下,vars更有意义 我有两个问题: 1) 有更好的方法吗?我错过什么了吗 2) 不允许真正的并行赋值的原因是什么?Scala有两种类型的变量:VAL和VAR。VAL类似于Java

我是Scala的新手,遇到了一个让我恼火的小问题

并行初始化两个变量非常有效:
var(x,y)=(1,2)

但是,我找不到一种并行分配新值的方法:
(x,y)=(x+y,y-x)//语法无效

我最后写了这样的东西:
valxtmp=x+y;y=x-y;x=xtmp

我意识到编写函数代码是避免这种情况的一种方法,但在某些情况下,vars更有意义

我有两个问题:

1) 有更好的方法吗?我错过什么了吗


2) 不允许真正的并行赋值的原因是什么?

Scala有两种类型的变量:VAL和VAR。VAL类似于Java的最终变量,据我从您的提问中了解,与VAL并行分配新值的唯一方法是:

scala> val (x, y) = (1, 2);


不幸的是,您不能在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.\u 1
,第二个值可以使用
xy.\u 2

我理解为什么不能将新值分配给val。我说的是VAR的并行分配。在我问题的代码中,x和y都是变量。他问如果你能做
val(x,y)=(1,2)
var(x,y)=(1,2)
那么你为什么不能做
var x;变量y;(x,y)=(1,2)
?请看@Seth Tisue,谢谢,但这是一个令人伤心的链接——WONTFIX:-(
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)