Scala 标量元组解构
我是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
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)