我有3个已经初始化的变量,我想为所有三个变量赋一个新值。例如
var a = 1
var b = 2
var c = 3
,我想将它们重新分配为相同的值,例如
a = b = c = 4
但是以上表达式无效。在Scala中有正确的方法吗?
答案 0 :(得分:3)
可以按如下所示稍微缩短var
定义代码
var (a, b, c) = (1, 2, 3)
这是由于scala中的extractor objects而起作用。将元组3提取到创建它的3个组件中。
但是,如果提取应用于val
或var
定义,则不不起作用。
(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)