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
あなたの場合、最初のアプローチをお勧めします。