11
Sto provando a scrivere un clone del rubino keep_if
e i metodi dell'array delete_if
. Ecco il mio codice.Il blocco pass passato al metodo in un altro metodo in Ruby
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
Questo funziona. Ma io voglio fare qualcosa di simile: il comportamento
def discard
self - self.keep &block
end
desiderata:
[1, 2, 3].discard { |number| number < 2 }
# => [2, 3]
Così ho bisogno di passare il blocco che viene passato al metodo discard
, da trasmettere al metodo keep
. Come ottengo questo?
Grazie! Ho finito per risolverlo senza passare il blocco, ma ho comunque imparato qualcosa. – Kappie001
Sono sorpreso che sia necessaria tutta questa risposta. Sembrava che una soluzione più complicata fosse desiderata. Proverò a formulare e chiedere il modo originale in cui ho letto la domanda –