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

  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • Liberator

    Liberator

    14 EYLÜL 2007
  • уσ ρℓz sυв ιℓℓ sυв вαcқ

    уσ ρℓz

    14 EKİM 2010