3 ms·
for-loops and .each had weird scoping rules until Ruby 1.9. In Ruby 1.9 for some weird reason they fixed .each but not for-loops. No idea why. So, if you're s
by zedshaw 14y ago
for-loops and .each had weird scoping rules until Ruby 1.9. In Ruby 1.9 for some weird reason they fixed .each but not for-loops. No idea why. So, if you're saying use .each for technical solution to a problem in Ruby, then your proposed solution only works in some versions of Ruby.
- mythrowaway2 14y agoThe pedantic answer is the code block following the for is not parsed as or represented as a code block internally. You don't need the "do" but Ruby slurps it up to play nice. Only block semantics were fixed, but those for constructs like while, until, for, or loop remain the same as they do not introduce new scope.
- weavejester 14y agoHow did .each have weird scoping pre-1.9? I've run across problems with for-loops, but .each has always behaved predictably, even in 1.8. Could you perhaps provide an example of code using .each that does the wrong thing in 1.8, but the right thing in 1.9?
- judofyr 14y agoa = 0 [1, 2, 3].each { |a| } a # => 3
- weavejester 14y agoAh, thanks for the clarification. I guess that means there are at least two odd things about scoping in 1.8 loops.