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

  • julioissk84life

    julioissk84l

    18 ŞUBAT 2008
  • Top Gear

    Top Gear

    27 Mart 2006
  • tsweeney79

    tsweeney79

    21 Ocak 2008