Aslında hiçbir fark yoktur map
ve C olarak rb_ary_collect
ve enum_collect
(örneğin map
, bir dizi ve diğer numaralar arasında bir fark vardır , fakat map
ve arasında bir fark yoktur collect
).
Neden ikisini de map
ve collect
Ruby var? map
Fonksiyon 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, transform
C # (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 map
bu dillerin üçünde de çağrılır . Harita için bir collect
diğ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 mapcar
gelene 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 each
yö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, each
ancak yalnızca önemli ölçüde daha hızlı olan basit işaretçi manipülasyonunu kullanabilir .
zip
Veya gibi birçok Array yöntemi için benzer optimizasyonlar mevcuttur count
.
map
Code Golf'te tercih edilmektedir .