【戻る】 【進む】   目次        42. ブロックを伴うメソッド - イテレータとは

イテレータ

  • イテレータとはブロックを繰り返し評価するタイプのメソッド
  • 代表的なもの:String#each, Array#each, File#each
  • ブロックの中で使える制御:break, redo, next, retry
  • def series(n)
      i = n
      loop do
        i = yield(i)
      end
    end
    
    series(100) do |i|
      j = i%2 > 0 ? 3*i+1 : i/2
      puts j
      break if j == 1
      j
    end
    
    collatz0.rb
    class Collatz
      include Enumerable
      def initialize(n)
        @n = n
      end
      def each
        i = @n
        while i > 1
          i = i%2 > 0 ? 3*i+1 : i/2
          yield i
        end
      end
    end
    
    c10 = Collatz.new(10)
    c10.each do |n|
      p n #=> 5, 16, 8, 4, 2, 1
    end
    p c10.to_a #=> [5, 16, 8, 4, 2, 1]
    p((1..100).collect{|n| Collatz.new(n).to_a.size}.max)
      #=> 118
    
    collatz1.rb

    【戻る】 【進む】   目次        42. ブロックを伴うメソッド - イテレータとは