Feature #1141
closedassignment of variable in "right" if statement fails
Description
=begin
In Ruby 1.8
p(x) if x=42
(irb):1: warning: found = in conditional, should be ==
NameError: undefined local variable or method `x' for main:Object
from (irb):1
In Ruby 1.9
$ irb19
irb(main):001:0> p (x) if (x=42)
NameError: undefined local variable or method x' for main:Object from (irb):1 from /usr/local/bin/irb19:12:in
'
However, if you move the if statement to the line before, naturally everything works.
Should variable assignment in "right" if clauses be permitted? I think so, since it allows you to be fairly concise and not have to do:
if x = 42
p(x)
end
"Right" if clauses are permitted because they read naturally, I assume. I'm not sure whether people regard variable assignment in this case as reading very "naturally", but there is at the very least a lack of consistency between this type of if clause, and the more regular type of if clause.
=end
Updated by matz (Yukihiro Matsumoto) over 15 years ago
- Status changed from Open to Rejected
=begin
local variable scope determined up to down, left to right. So a local variable first assigned in the condition of if modifier is not effective in the left side if body. It's a spec.
=end
Updated by duerst (Martin Dürst) over 7 years ago
- Related to Bug #13543: local variable declaration added