make_rangeを作る

弾さんのfor(1..1e10) と Iteratorを読んで、make_rangeをRubyで書いてみました。

def make_range(now, limit)
  lambda { now <= limit ? (now += 1) - 1 : nil }
end

sum = 0
# r = make_range(1, 1e7)
r = make_range(1, 1000000)  # 1e7だと終わらなかったので、1e6にしました
while x = r.call
  sum += x
end
puts sum

はじめ、now += 1がpost incrementでないことに気づかず、計算が合わなくて焦りました。
参照: 仮想的な無限列
追記:誤解を招くような書き方でしたが、1e7だと終わらなかったので、1e6にしたのでした。kmdsbngさん、ごめんなさい。
追記:きゃあ。やろうとしていたことを、KamedaさんにRangeクラスを実装してみるでやられてしまいました(^_^;