Scala Tuple解构

时间:2010-05-05 20:46:29

标签: scala

我是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)不允许真正的并行分配的原因是什么?

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