Yakutta indirgeme ile aynı şey mi enjekte edilir?


114

Burada birlikte belgelendiğini gördüm . Aynı şey mi? Ruby'nin neden bu kadar çok takma adı var (diziler için harita / toplama gibi)? Çok teşekkürler.

Yanıtlar:


160

Evet ve folddiğer birçok programlama dilinde ve Matematikte de denir . Ruby, farklı geçmişlere sahip programcılar için sezgisel olmak için çok fazla takma ad kullanır. Bir #lengthüzerinde kullanmak istiyorsanız Array, yapabilirsiniz. Kullanmak istiyorsanız #size, bu da sorun değil!


4
Kendi takma adlarınızı oluşturmak istiyorsanız, alias_method ilginizi çekebilir .
Nick McCurdy

23
#length ve #count Ruby'de eşdeğer değildir. #length ve #size vardır.
Quolonel Soruları

9
3. uzunluk, NoMethodError verir; 3. boyut döndürür 4. Açıkçası 3 bir dizi değildir, ancak ördek yazarken dikkatli olun! (3_000_000_000_000_000.size, 8 döndürür ve 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size, 20 değerini döndürür; kapladığı bellek miktarı görünüyor.)
ChrisPhoenix

18
hm, bence şu anki Ruby docs ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce aynı şeyi söylerse daha iyi olabilir, injectböylece kullanıcılar ikisini okumak zorunda kalmaz tanımlayın ve aynı olup olmadıklarını anlamaya çalışın ... bu KURU prensibine uymuyor mu?
nonopolarity

3
@ 太極 者 無極 而 生, iyi nokta, tam tahmin ettiğiniz gibi kafam karıştı
neontapir

6

Belgelerin daha yeni sürümleri Enumerable#reducebunu açıkça belirtir:

injectVe reduceyöntemler rumuzlarıdırlar. İkisinin de performans faydası yoktur.


1
Onları nasıl kullanıldığına göre ayırmayı seviyorum, tabii ki sadece anlambilim için. eğer bir proc ( &:+) ise, azaltın, bir
bloksa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.