将相同的值分配给Scala中的多个变量

时间:2019-03-15 08:36:10

标签: scala

我有3个已经初始化的变量,我想为所有三个变量赋一个新值。例如

var a = 1
var b = 2
var c = 3

,我想将它们重新分配为相同的值,例如

a = b = c = 4

但是以上表达式无效。在Scala中有正确的方法吗?

2 个答案:

答案 0 :(得分:3)

可以按如下所示稍微缩短var定义代码

var (a, b, c) = (1, 2, 3)

这是由于scala中的extractor objects而起作用。将元组3提取到创建它的3个组件中。

但是,如果提取应用于valvar定义,则不起作用。

(a, b, c) = (4, 4, 4)

答案 1 :(得分:1)

您可以这样做:

var Seq(a, b, c) = Seq.fill(3)(4)

与Ivan的解决方案一样,这仅在声明var或val时有效,而在重新分配时无效。由于第二个参数是针对每个元素计算的,因此它甚至适用于可变对象:

import scala.collection.mutable.ListBuffer

var Seq(a, b, c) = Seq.fill(3)(ListBuffer[Int]())
a += 1  // Only modifies a, not b or c.

相比之下,类似a = b = c = []的东西只会在大多数编程语言(例如Python,JavaScript,Java)中创建一个列表。如果您不想每次都创建对象(也许是因为它是不可变的,并且创建成本很高),请首先将其声明为val,以防止出现这种情况:

val largeObject = ???
var Seq(a, b, c) = Seq.fill(3)(largeObject)