to_enum(method = :each, *args) -> Enumerator
[permalink][rdoc]enum_for(method = :each, *args) -> Enumerator
to_enum(method = :each, *args) {|*args| ... } -> Enumerator
enum_for(method = :each, *args) {|*args| ... } -> Enumerator
Enumerator.new(self, method, *args) を返します。
ブロックを指定した場合は Enumerator#size がブロックの評価結果を返します。ブロックパラメータは引数 args です。
str = "xyz" enum = str.enum_for(:each_byte) p(a = enum.map{|b| '%02x' % b }) #=> ["78", "79", "7a"] # protects an array from being modified a = [1, 2, 3] p(a.to_enum) #=> #<Enumerator: [1, 2, 3]:each>
例(ブロックを指定する場合):
module Enumerable def repeat(n) raise ArgumentError, "#{n} is negative!" if n < 0 unless block_given? # __method__ はここでは :repeat return to_enum(__method__, n) do # size メソッドが nil でなければ size * n を返す。 sz = size sz * n if sz end end each do |*val| n.times { yield *val } end end end %i[hello world].repeat(2) { |w| puts w } # => 'hello', 'hello', 'world', 'world' enum = (1..14).repeat(3) # => #<Enumerator: 1..14:repeat(3)> enum.first(4) # => [1, 1, 1, 2] enum.size # => 42
[SEE_ALSO] Enumerator, Enumerator#size