このコードは、私が見つけた例から、インデックスに等しい配列内の要素の数をカウントします。しかし、どのように?
[4, 1, 2, 0].to_enum(:count).each_with_index{|elem, index| elem == index}
連鎖だけではできなかったし、連鎖内の評価の順番がややこしい。
私が理解しているのはEnumerable#count
、ブロックが指定されている場合、真の値を生成する要素の数をカウントするオーバーロードを使用していることです。each_with_index
アイテムがそのインデックスと等しいかどうかのロジックがあることがわかります。
私が理解していないのはeach_with_index
、 のブロック引数がどのようになるか、またはが で直接呼び出されたかのようcount
に機能する理由です。存在する場合は、次のことができます。each_with_index
[4,1,2,0]
map_with_index
[4,1,2,0].map_with_index{ |e,i| e==i ? e : nil}.compact
しかし、この列挙可能なベースのスタイルを理解するのを手伝ってください-それはエレガントです!