我正在try 编写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
方法.我如何做到这一点?