我有这个方法的类,如果没有给出块,它应该返回 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 eq Enumerator”
禁止使用@data.each(或收集、映射等),我必须自己实现。我在互联网上花了大约两个小时,但我仍然不知道该怎么做,因为在每个示例中,他们只是将“每个”函数委托给已经完成的类,如 Array ......或者他们只是不关心返回“枚举器”因为没有给出块。
解决方案 :
def each
if (block_given?)
0.upto(size - 1) do |x|
yield @data[x]
end
self
else
to_enum(:each)
end
end