Array#delete_if でも self を返すのではなく、Array#delete のように削除した要素を返して欲しい。
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 を始めた頃によく引っかかる事柄のひとつだと思うのですが、
なぜこのような違いがあるのでしょうね? わたし、きになります!