Aslında hiçbir fark yoktur mapve C olarak rb_ary_collectve enum_collect(örneğin map, bir dizi ve diğer numaralar arasında bir fark vardır , fakat mapve arasında bir fark yoktur collect).
Neden ikisini de mapve collectRuby var? mapFonksiyon farklı dillerde birçok adlandırma kuralları vardır. Wikipedia bir genel bakış sunar :
Harita işlevi işlevsel programlama dillerinden kaynaklanır, ancak bugün birçok yordamsal, nesne yönelimli ve çoklu paradigma dilinde de desteklenir (veya tanımlanabilir): C ++ 'ın Standart Şablon Kütüphanesinde, transformC # (3.0)' da denir. LINQ kütüphanesi, adı verilen bir uzantı yöntemi olarak sağlanır Select. Harita ayrıca Perl, Python ve Ruby gibi üst düzey dillerde sık kullanılan bir işlemdir; operasyon mapbu dillerin üçünde de çağrılır . Harita için bir collectdiğer ad da Ruby'de (Smalltalk'tan) [vurgu mayın]. Common Lisp, harita benzeri işlevler ailesi sağlar; burada açıklanan davranışa karşılık mapcargelene denir (-CAR işlemini kullanarak erişimi gösteren araç).
Ruby, Smalltalk dünyasından programcıların kendilerini evlerinde hissetmeleri için bir takma ad sağlar.
Diziler ve sıralamalar için neden farklı bir uygulama var? Bir enum genelleştirilmiş bir yineleme yapısıdır, yani Ruby'nin bir sonraki öğenin ne olabileceğini tahmin etmesinin bir yolu yoktur (sonsuz numaralandırmalar tanımlayabilirsiniz, bkz . Örnek için Prime ). Bu nedenle, birbirini izleyen her öğeyi almak için bir işlev çağırmalıdır (genellikle bu eachyöntem olacaktır ).
Diziler en yaygın koleksiyonlardır, bu nedenle performanslarını optimize etmek mantıklıdır. Ruby, dizilerin nasıl çalıştığı hakkında çok şey bildiğinden, aramak zorunda değildir, eachancak yalnızca önemli ölçüde daha hızlı olan basit işaretçi manipülasyonunu kullanabilir .
zipVeya gibi birçok Array yöntemi için benzer optimizasyonlar mevcuttur count.
mapCode Golf'te tercih edilmektedir .