1

このメソッドを持つクラスがあり、ブロックが指定されていない場合は 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
4

1 に答える 1