I can't understand precedence of Ruby operators in a following example:
x = 1 && y = 2
Since &&
has higher precedence than =
, my understanding is that similarly to +
and *
operators:
1 + 2 * 3 + 4
which is resolved as
1 + (2 * 3) + 4
it should be equal to:
x = (1 && y) = 2
However, all Ruby sources (including internal syntax parser Ripper
) parse this as
x = (1 && (y = 2))
Why?
EDIT [08.01.2016]
Let's focus on a subexpression: 1 && y = 2
According to precedence rules, we should try to parse it as:
(1 && y) = 2
which doesn't make sense because =
requires a specific LHS (variable, constant, []
array item etc). But since (1 && y)
is a correct expression, how should the parser deal with it?
I've tried consulting with Ruby's parse.y
, but it's so spaghetti-like that I can't understand specific rules for assignment.