我是Scala的新手,遇到了一个让我烦恼的小打嗝。
并行初始化两个变量非常有效:var (x,y) = (1,2)
但是,我无法找到并行分配新值的方法:(x,y) = (x+y,y-x) //invalid syntax
我最后写的是这样的:val xtmp = x+y; y = x-y; x = xtmp
我意识到编写功能代码是避免这种情况的一种方法,但在某些情况下,变量才更有意义。
我有两个问题:
1)有更好的方法吗?我错过了什么吗?
2)不允许真正的并行分配的原因是什么?
答案 0 :(得分:22)
很遗憾,您无法在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._1
访问,第二个值使用xy._2
。
答案 1 :(得分:1)
Scala有两种类型的变量:vals和vars。 Vals类似于Java的最终变量,因此,据我所知,您可以通过以下方式将新值并行分配给vals:
scala> val (x, y) = (1, 2);
或
scala> val s = (3, 4);
s: (Int, Int) = (3,4)
scala> s._1
res1: Int = 3
scala> s._2
res2: Int = 4