excepciones crear ruby block

crear - hash en ruby



Pasar el bloque pasado al método a otro método en Ruby (1)

Estoy intentando escribir un clon de los métodos de matriz ruby keep_if y delete_if . Aquí está mi código.

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

Esto funciona. Pero quiero hacer algo como:

def discard self - self.keep &block end

Conducta deseada:

[1, 2, 3].discard { |number| number < 2 } # => [2, 3]

Por lo tanto, necesito pasar el bloque que se pasa al método de discard , para pasar al método de keep . ¿Cómo logro esto?


Puede hacer referencia al bloque explícitamente

def discard(&block) self - self.keep(&block) end

o implícitamente

def discard self - self.keep(&Proc.new {}) end

En su caso, sugeriría el primer enfoque.