Reputation: 15
Like the following example:
scala> if (true) { 1 } else { 2 } + 3
val res1: Int = 1
scala> if (false) { 1 } else { 2 } + 3
val res2: Int = 5
It seems as if the curly braces are ignored. Wrapping the if-else expression with parentheses seems to work as expected.
scala> (if (true) { 1 } else { 2 }) + 3
val res3: Int = 4
This appears super unintuitive to me. Can someone please help me understand this?
Upvotes: 0
Views: 41
Reputation: 27356
The intuition is that braces simply create a block expression that can be part of a larger expression. They are not part of the if
statement.
The general form of if
is
if (<test>) <expression> else <expression>
In the question the code after the else
is a simple expression:
{ 2 } + 3
+
has a higher precedence than if/else
so it is parsed as
if (<test>) { 1 } else ({ 2 } + 3)
rather than
(if (<test>) { 1 } else { 2 }) + 3
Upvotes: 1