Articles

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 Enumerable
def kollect
new_ary =
self.each do |elem|
new_ary << yield(elem)
end
new_ary
end
end

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.