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.