このメソッドを持つクラスがあり、ブロックが指定されていない場合は 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 (または収集、マップなど) を使用することは禁止されています。自分で実装する必要があります。私はインターネットで約2時間過ごしましたが、どの例でも「各」関数を配列のようなすでに完成したクラスに委譲するだけなので、その方法はまだわかりません...または、「列挙子」を返すことを気にしませんブロックが指定されていないため。
解決 :
def each
if (block_given?)
0.upto(size - 1) do |x|
yield @data[x]
end
self
else
to_enum(:each)
end
end