Я пытаюсь написать клон методов массива ruby keep_if
и delete_if
. Вот мой код.
module Strain
def keep
self.inject([]) do |extracts, element|
yield(element) ? extracts << element : extracts
end
end
def discard
self.inject([]) do |extracts, element|
!yield(element) ? extracts << element : extracts
end
end
end
class Array
include Strain
end
Это работает. Но я хочу сделать что-то вроде:
def discard
self - self.keep &block
end
Желаемое поведение:
[1, 2, 3].discard { |number| number < 2 }
# => [2, 3]
Поэтому мне нужно передать блок, который передается методу discard
, который будет передан методу keep
. Как достичь этого?