Как мне обернуть массив определенным подклассом 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 ответ
Я смог подкласс 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 в #new, Перечислитель подклассов.