何となくやってみました。
$ pry [1] pry(main)> 5.times {|i| puts i} 0 1 2 3 4 => 5 [2] pry(main)> (1..5).each {|i| puts i} 1 2 3 4 5 => 1..5 [3] pry(main)> 1.upto(5) {|i| puts i} 1 2 3 4 5 => 1 [4] pry(main)> for i in 1..5 [4] pry(main)* puts i [4] pry(main)* end 1 2 3 4 5 => 1..5 [5] pry(main)> i = 1 => 1 [6] pry(main)> while i <= 5 [6] pry(main)* puts i [6] pry(main)* i += 1 [6] pry(main)* end 1 2 3 4 5 => nil [7] pry(main)> def count(i) [7] pry(main)* return if i > 5 [7] pry(main)* puts i [7] pry(main)* count(i + 1) [7] pry(main)* end => :count [8] pry(main)> count(1) 1 2 3 4 5 => nil [9] pry(main)> co = Enumerator.new do |y| [9] pry(main)* i = 1 [9] pry(main)* while i <= 5 [9] pry(main)* y << i [9] pry(main)* i += 1 [9] pry(main)* end [9] pry(main)* end => #<Enumerator: ...> [10] pry(main)> loop {puts co.next} 1 2 3 4 5 => nil [11] pry(main)> co = Enumerator.new do |y| [11] pry(main)* i = 1 [11] pry(main)* loop do [11] pry(main)* y << i [11] pry(main)* i += 1 [11] pry(main)* end [11] pry(main)* end => #<Enumerator: ...> [12] pry(main)> puts co.take(5) 1 2 3 4 5 => nil [13] pry(main)> puts 1.step.take(5) 1 2 3 4 5 => nil
ふーんという感じでしょうか。