如何使用Enumerator的特定子类包装数组?

时间:2013-11-07 18:51:43

标签: ruby enumerable enumerator

我创建了一个Enumerator的子类,它有一些特殊属性(即它知道它的元素是Time对象):

class TimedEnumerator < Enumerator
  ...some time-specific methods...
end

给定一个Time对象数组,如何生成TimedEnumerator?我的第一个想法只是使用:: new方法,但会产生弃用警告:

>> TimedEnumerator.new(array)
(irb):12: warning: Enumerator.new without a block is deprecated; use Object#to_enum

当然,array.to_enum创建一个Enumerator对象,而不是TimedEnumerator对象。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我能够将Enumerator子类化为:

class TimedEnumerator < Enumerator
  def initialize(array)
    super() do |array|
      #your logic
    end
  end 
end

TimedEnumerator.new(array)
#=> <TimedEnumerator: #<Enumerator::Generator:0x007ff4cb89a9f0>:each>

从此处找到super()诀窍:ArgumentError in #new, Subclassing Enumerator