My Scala codes looks like this
if (true) {
val a = 1
}
else {
val a = 2
}
print(a)
print(a+100)
the print(a)
will throw an error because a
is out of scope when evaluating that line.. Then how can I define a val
according to a conditional expression? Does anyone have ideas about this?
In scala
if
is expression - it returns value. So you could assign this value to val
:
val a =
if (true) {
1
} else {
2
}
// for simple expressions:
val a2 = if (true) 1 else 2
print(a)
print(a+100)
It's good to note that this idiom can also be extended to declaring and setting multiple variables by taking advantage of destructuring assignment:
val (a, b) =
if (true) {
(1, 5)
} else {
(2, 10)
}
print(a)
print(b)
The above can further be extended to match
statements and unpacking anything that can be unapply
'd.
Additionally, if you have multiple variables of the same type, you can use list deconstruction:
val List(a, b) =
if (true)
List(1, 5)
else
List(2, 10)
// OR
val a :: b :: Nil =
if (true)
List(1, 5)
else
List(2, 10)
print(a)
print(b)