I have the following simple snippet:
var = 1 if false
I would expect this to evaluate as:
(var = 1) if false
so var
would be undefined. However, var
gets defined and receives a nil
as its value.
What am I missing here?
I have the following simple snippet:
var = 1 if false
I would expect this to evaluate as:
(var = 1) if false
so var
would be undefined. However, var
gets defined and receives a nil
as its value.
What am I missing here?
Ruby recognizes local variables during parsing. So, in your case, even thouogh it's not set to 1
(because the precedence of this expression is like you wrote), ruby knows that it's local variable and doesn't raise NameError
.
Ruby parser defines var
when it sees it on the lefthand side of an expression (even though its inside of a conditional that doesn’t run). So nil
looks an appropriate value.