概要
Object#to_enum(method = :each, *args) -> Enumerator
Object#enum_for(method = :each, *args) -> Enumerator
Object#to_enum(method = :each, *args) {|*args| ... } -> Enumerator
Object#enum_for(method = :each, *args) {|*args| ... } -> Enumerator
詳細
Enumerator.new(self, method, *args) を返却。
サンプルコード
class EvenNumbers include Enumerable def initialize @number = 2 end def each loop do yield(@number) @number += 2 end end def each_slice_sum(slice_count, limit) unless block_given? return to_enum(__method__, slice_count, limit) do limit end end each_slice(slice_count).with_index do |e, i| yield(e.reduce(&:+)) break if i >= limit end end end even_numbers = EvenNumbers.new even_enum = even_numbers.enum_for print even_enum.take(10), "\n" even_numbers = EvenNumbers.new even_enum = even_numbers.to_enum print even_enum.take(10), "\n" even_numbers = EvenNumbers.new even_enum = even_numbers.to_enum(:each_slice, 2) print even_enum.take(5), "\n" even_numbers = EvenNumbers.new even_numbers.each_slice_sum(2, 10) { |e|printf("%s,", e) } puts even_numbers = EvenNumbers.new print even_numbers.each_slice_sum(2, 10).size, "\n"
出力
$ ruby object_enum_for.rb [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] [[2, 4], [6, 8], [10, 12], [14, 16], [18, 20]] 6,14,22,30,38,46,54,62,70,78,86, 10