1

我创建了一个具有一些特殊属性的 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 对象。

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

4

1 回答 1

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()从这里找到诀窍: #new, Subclassing Enumerator 中的 ArgumentError

于 2013-11-07T19:14:36.940 回答