implementarea metodei Ruby 's Collect Method
Ruby ‘s Collect method
Ruby’ s collect
face parte din Mixinul Enumerabil; un mixin care oferă metode foarte utile și puternice pentru obiectele de colectare. collect
este o metodă pe care o folosesc tot timpul și despre care am scris recent în articolul meu lucrând cu enumerables: patru metode puternice de colectare.
collect
vă permite să transformați fiecare element al obiectului colecției (matrice, Hash sau propriul obiect) în altceva, terminând cu o matrice.
Iată un exemplu simplu de a lua o serie de numere întregi și de a înmulți fiecare dintre ele cu 2.
.collect{ |num| num * 2 }#
reimplementarea metodei Collect
am vrut să-mi creez propria metodăcollect
pentru a vedea cum este implementată. Se pare că se face destul de ușor, în aproximativ 5 linii de cod. Ar trebui să spun că singurul caz de utilizare pe care nu îl acopăr este atunci când Niciun Bloc nu este trecut la metodă, caz în care un Enumerator este de obicei returnat.
vom adăuga noul nostrukollect
(astfel încât numele să nu intre în conflict) la modulul Enumerabil. Looping prin colecția noastră, vom aplica blocul fiecărui element, adăugând rezultatul returnat la o nouă matrice care este creată.
module Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
dacă comparăm acest lucru cu codul sursă al lui Ruby, în esență face același lucru, dar este mult mai simplu pentru că lucrăm cu Ruby în sine și nu cu C.
folosind noua noastră metodă de colectare
acum nu mai rămâne decât să vedem dacă metoda kollect
chiar funcționează! Am vrut să-l încerc folosind atât sintaxa normală a blocului, cât și mâna scurtă &:sintaxa method_name, pentru a asigura atât munca.
grozav! În ambele cazuri, este nevoie de numele din matrice și le transformă în majuscule.