SORU
2 NİSAN 2009, PERŞEMBE


Yöntem enjekte basit bir açıklamaya ihtiyacım var

[1, 2, 3, 4].inject(0) { |result, element| result   element } # => 10

Bu kod bakıyorum ama beynim 10 sonuç olabileceğini kaydediyor. Biri burada neler olduğunu açıklayan bir sakıncası var mı?

CEVAP
2 NİSAN 2009, PERŞEMBE


Bir akümülatör olarak ilk bloğu bağımsız düşünebilirsiniz: blok her çalışma akümülatör saklanan ve daha sonra blok bir sonraki yürütme geçirilir sonucu. Kodu yukarıda gösterilen durumda, akü varsaymak, 0 sonuç. Blok her çalışma mevcut toplam verilen numara ekler ve sonra sonucu geri akümülatör içine saklar. Sonraki blok çağrısı bu yeni değeri vardır, ekler, tekrar depolar ve tekrarlar.

Bu sürecin sonunda, enjekte bu durumda dizideki bütün değerleri toplamı olan akü, ya da 10 verir.

Burada nesne, dize gösterimine anahtarlı bir dizi bir karma oluşturmak için başka bir basit örnek:

[1,"a",Object.new,:hi].inject({}) do |hash, item|
  hash[item.to_s] = item
  hash
end

Bu durumda, boş bir karma bizim akümülatör, o zaman her zaman doldurma varsayarak biz bu bloğu yürütür. Blok sonucu akümülatör içinde saklı dönecek çünkü blok son satırı olarak karma dönmek zorundayız dikkat edin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • YAN TV

    YAN TV

    20 EKİM 2011