Implementieren von Ruby's Collect-Methode
Rubys Collect-Methode
Rubys collect
Methode ist Teil des aufzählbaren Mixins; ein Mixin, das sehr nützliche und leistungsstarke Methoden für Sammlungsobjekte bereitstellt. collect
ist eine Methode, die ich ständig verwende und über die ich kürzlich in meinem Artikel Working with enumerables: Four powerful collection methods .
collect
ermöglicht es Ihnen, jedes Element Ihres Sammlungsobjekts (Array, Hash oder Ihr eigenes Objekt) in etwas anderes umzuwandeln und am Ende ein Array zu erhalten.
Hier ist ein einfaches Beispiel, wie man ein Array von ganzen Zahlen nimmt und jedes von ihnen mit 2 multipliziert.
.collect{ |num| num * 2 }#
Erneute Implementierung der Collect-Methode
Ich wollte meine eigene collect
-Methode erstellen, um zu sehen, wie sie implementiert ist. Es stellt sich heraus, dass dies in etwa 5 Codezeilen recht einfach ist. Ich sollte sagen, dass der einzige Anwendungsfall, den ich nicht behandle, darin besteht, dass kein Block an die Methode übergeben wird.
Wir fügen unser neues kollect
(damit die Namen nicht in Konflikt stehen) zum aufzählbaren Modul hinzu. Wenn wir unsere Sammlung durchlaufen, wenden wir den Block auf jedes Element an und fügen das zurückgegebene Ergebnis einem neuen Array hinzu, das erstellt wird.
module Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
Wenn wir dies mit Rubys Quellcode vergleichen, macht es im Wesentlichen dasselbe, ist aber viel einfacher, weil wir mit Ruby selbst arbeiten und nicht mit C.
Mit unserer neuen Collect-Methode
Jetzt bleibt nur noch zu sehen, ob die kollect
-Methode tatsächlich funktioniert! Ich wollte es sowohl mit der normalen Blocksyntax als auch mit der Kurzhand &:method_name Syntax, um sicherzustellen, dass beide funktionieren.
Großartig! In beiden Fällen werden die Namen im Array verwendet und in Großbuchstaben konvertiert.