0

このメソッドを使用して奇妙な要素を返そうとしています

def odd_elements(array)
  retArr = Array.new
  array.each_with_index do |item, index|
    if block_given?
      yield(item)
    else
      retArr << item
    end if index % 2 != 0
  end

  return retArr
end

これらのテストの両方に合格できるように

it "should yield odd elements" do
  res = odd_elements([1,2,3,4,5,6])
  res.should be_an_instance_of Array
  res.should have(3).items
  res.should include(2)
  res.should include(4)
  res.should include(6)
end

it "should yield" do
  res = odd_elements([1,2,3,4,5,6]) {|x| x**2 }
  res.should be_an_instance_of Array
  res.should have(3).items
  res[0].should == 4
  res[1].should == 16
  res[2].should == 36
end

しかし、私は2番目のものに失敗しています。譲る方法を理解していないようで、さまざまなことを試して2時間でうまくいきませんでした。うまくいかない理由を教えてください。

4

2 に答える 2

1
odd_elements([1,2,3,4,5,6]){|x|p x**2 } #note the p
#=> 4
#=> 16
#=> 36

うまくいきますが、結果を配列に格納することはありません。

odd_elements([1,2,3,4,5,6]).map {|x| x**2 }

結果を配列に保存します。

于 2013-09-30T16:01:07.710 に答える