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

  • Christian Atlas

    Christian At

    26 Mart 2009
  • MuscleProdigyTV

    MuscleProdig

    8 Ocak 2011
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009