som*_*guy 8 expression scala variable-assignment
我如何在scala中表达以下java代码?
a = b = c;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我正在重新分配变量(不是声明).
ret*_*nym 13
Scala中最接近的快捷语法只能在声明var
或使用时使用val
.
scala> val c = 1
c: Int = 1
scala> val a, b = c
a: Int = 1
b: Int = 1
Run Code Online (Sandbox Code Playgroud)
来自Scala参考,第4.1节
值声明val x 1,...,x n:T是值声明序列val x 1:T 的简写; ...; val x n:T.值定义val p 1,...,p n = e是值定义序列val p 1 = e 的简写; ...; val p n = e.值定义val p 1,...,p n:T = e是值定义序列的缩写val p 1 :T = e; ...; val p n:T = e.
这不适用于重新分配给a var
.由于这里解释的原因,C/Java风格不起作用:Scala分配评估单元的动机是什么
使用赋值的左侧在语法上是模式的事实.(参见SLS中的 PatVarDef> PatDef> Pattern2 .)
a = b = 5
scala> val a@b = 5
a: Int = 5
b: Int = 5
Run Code Online (Sandbox Code Playgroud)
x = y = z =新对象
scala> var x@(y@z) = new Object
x: java.lang.Object = java.lang.Object@205144
y: java.lang.Object = java.lang.Object@205144
z: java.lang.Object = java.lang.Object@205144
Run Code Online (Sandbox Code Playgroud)
请注意,右侧站点上的表达式仅计算一次.
不幸的是,这种语法不适用于重新分配(所以x = y = value
你仍然需要这样做x = value; y = x
).
另请参见[scala-language] Scala中的链接赋值