У меня есть класс с этим методом, который должен возвращать Enumerator, если ни один блок не указан или не перечисляется, если он задан. Это просто симуляция метода Array.each
. Перечисление работает правильно.Возвращающийся счетчик по собственному усмотрению
def each
if (block_given?)
0.upto(size - 1) do |x|
yield @data[x]
end
end
end
И тестируется остроумие этот код:
it "should return Enumerator" do
res = subject.each
res.class.should eq Enumerator
res.to_a.should eq data
end
Ошибка "Сбой/Ошибка: res.class.should эк Enumerator"
ЗАПРЕЩЕНО использовать @data. каждый (или собирать, карту и т. д.), я должен сам реализовать его. Я провел около двух часов в Интернете, и я до сих пор не знаю, как это сделать, потому что в каждом примере они просто делегируют «каждую» функцию уже законченному классу, например Array ... Или они просто не заботятся о возвращении «Enumerator msgstr "нет никакого блока.
РЕШЕНИЕ:
def each
if (block_given?)
0.upto(size - 1) do |x|
yield @data[x]
end
self
else
to_enum(:each)
end
end
Это работает, ТХ :). – libik