11
Ich versuche, einen Klon der Ruby keep_if
und delete_if
Array-Methoden zu schreiben. Hier ist mein Code.Pass-Block an Methode zu einer anderen Methode in Ruby übergeben
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
Dies funktioniert. Aber ich will, wie etwas tun:
def discard
self - self.keep &block
end
Wunschverhalten:
[1, 2, 3].discard { |number| number < 2 }
# => [2, 3]
Also muß ich um den Block zu übergeben, die an die discard
Methode übergeben wird, auf die keep
Methode übergeben werden. Wie erreiche ich das?
Danke! Ich habe es gelöst, ohne den Block zu passieren, aber ich habe trotzdem etwas gelernt. – Kappie001
Ich bin überrascht, dass all diese Antwort benötigt wird. Es klang wie eine kompliziertere Lösung gewünscht wurde. Ich werde versuchen, die ursprüngliche Art zu formulieren und zu fragen, wie ich die Frage lese –