module ArrayExtention def reject_if(&block) rejected = [] delete_if do |value| rejected << value if block.call(value) end rejected end end array = *(1..5) #=> [1, 2, 3, 4, 5] array.delete_if(&:odd?) #=> [2, 4] array #=> [2, 4] array = *(1..5) #=> [1, 2, 3, 4, 5] array.extend(ArrayExtention) array.reject_if(&:odd?) #=> [1, 3, 5] array #=> [2, 4] Array#delete_if と Array#delete の返り値の違いは Ruby を始めた頃によく