How would I express the following java code in scala?
a = b = c; By the way, I'm re-assigning variables (not declaring).
The closest shortcut syntax in Scala can only be used when you declare a var or val.
scala> val c = 1 c: Int = 1 scala> val a, b = c a: Int = 1 b: Int = 1 From the Scala Reference, Section 4.1
A value declaration val x1 , ... , xn: T is a shorthand for the sequence of value declarations val x1: T ; ...; val xn: T. A value definition val p1, ..., pn = e is a shorthand for the sequence of value definitions val p1 = e ; ...; val pn = e . A value definition val p1, ... , pn : T = e is a shorthand for the sequence of value definitions val p1 : T = e ; ...; val pn: T = e .
This doesn't work for re-assignement to a var. The C/Java style doesn't work for reasons explained here: What is the Motivation for Scala Assignment Evaluating to Unit
a and b in val a, b = new Object will refer to different objects.Using the fact that the left-hand-side of an assignment is syntactically a pattern. (See PatVarDef > PatDef > Pattern2 in SLS.)
a = b = 5
scala> val a@b = 5 a: Int = 5 b: Int = 5 x = y = z = new Object
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 Note that the expression on the right-hand-site is evaluated only once.
Unfortunately, this syntax doesn't work for reassigning (so for x = y = value you still have to do x = value; y = x).