grammar - Understanding precedence of assignment and logical operator in Ruby -
i can't understand precedence of ruby operators in following example:
x = 1 && y = 2
since &&
has higher precedence =
, understanding +
, *
operators:
1 + 2 * 3 + 4
which resolved as
1 + (2 * 3) + 4
it should equal to:
x = (1 && y) = 2
however, ruby sources (including internal syntax parser ripper
) parse as
x = (1 && (y = 2))
why?
edit [08.01.2016]
let's focus on subexpression: 1 && y = 2
according precedence rules, should try parse as:
(1 && y) = 2
which doesn't make sense because =
requires specific lhs (variable, constant, []
array item etc). since (1 && y)
correct expression, how should parser deal it?
i've tried consulting ruby's parse.y
, it's spaghetti-like can't understand specific rules assignment.
simple. ruby interprets in way makes sense. =
assignment. in expectation:
x = (1 && y) = 2
it not make sense assign 1 && y
. can assign variable or constant.
and note purpose of precedence rule disambiguate otherwise ambiguous expression. if 1 way interpret not make sense, there no need disambiguation, , hence precedence rule not in effect.
Comments
Post a Comment