4 ms·
That is what I'd expect. 1.upto implies starting at 1... otherwise why would upto be called on 1? If you want the behavior you expect, type: x = 4 5.time
by gunderson 18y ago
That is what I'd expect.
1.upto implies starting at 1... otherwise why would upto be called on 1?
If you want the behavior you expect, type:
x = 4
5.times do
x += 1
end
- DougBTX 18y agoNormally you'd expect the parameter of a block to be a new variable, not to grab a variable from another scope and use that instead. So the "expected" value is 4, since x = 4 on the first line. You'd expect these two examples to output the same number: x = 1 my_fun do |x| x = 5 end puts x # => 5 and x = 1 my_fun do |y| y = 5 end puts x # => 1 where my_fun could be defined as: def my_fun yield 2 end
- gunderson 18y agoYou're right, and that is the behavior in Ruby 1.9. I posted the example I did so that those unfamiliar with Ruby would see that the parent was a contrived example to use upto in that context. Sure it's awkward b/c it's not the intended semantics of the upto method, hence the ambiguity. Maybe an ideal language would not introduce that sort of ambiguity... I personally slightly perfer the 1.9 syntax.