我正在尝试编写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
方法.我该如何实现这一目标?
您可以显式引用该块
def discard(&block) self - self.keep(&block) end
或含蓄地
def discard self - self.keep(&Proc.new {}) end
在你的情况下,我会建议第一种方法.