【发布时间】:2013-10-17 03:38:16
【问题描述】:
我有这个方法的类,如果没有给出块,它应该返回 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
【问题讨论】:
标签: ruby