views:

163

answers:

4

How would I express the following java code in scala?

a = b = c;

By the way, I'm re-assigning variables (not declaring).

A: 
val b = c
val a = b

You can't write

val a = b = c

since that defines an expression

Brian Agnew
or `var`, when the variable is variable and not final.
Pindatjuh
Isn't there a shorthand? It seems stupid having to write b = c; a = b
someguy
+1  A: 

The "return type" of the expression (assignment) b = c is Unit, I'm afraid, which means this syntax is not valid.

oxbow_lakes
+7  A: 

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

retronym
+1  A: 
b = c; a = b

Awkward, I know. That's Scala pretty much telling you "don't do that". Consider it the Scala version of Python's space identation for block delimitation.

Daniel