Gerçekten arasındaki fark hakkında kafam karıştı each.with_indexve each_with_index. Farklı türleri var ama pratikte aynı görünüyorlar.
Yanıtlar:
with_indexYöntem, başlangıç endeksi dengelemek için isteğe bağlı bir parametre alır. each_with_indexaynı şeyi yapar, ancak isteğe bağlı bir başlangıç dizini yoktur.
Örneğin:
[:foo, :bar, :baz].each.with_index(2) do |value, index|
puts "#{index}: #{value}"
end
[:foo, :bar, :baz].each_with_index do |value, index|
puts "#{index}: #{value}"
end
Çıktılar:
2: foo
3: bar
4: baz
0: foo
1: bar
2: baz
each_with_indexRuby'ye daha önce tanıtıldı. with_indexdaha sonra tanıtıldı:
0.Bugün, kullanmak with_indexgenellik ve okunabilirlik açısından daha iyi olurdu, ancak kodu hızlandırma açısından each_with_indexbiraz daha hızlı çalışıyor each.with_index.
Tek bir yöntemin birkaç yöntemin doğrudan zincirlenmesiyle kolayca ifade edilebileceğini düşündüğünüzde, genellikle tek yöntemin zincirden daha hızlı olduğu durum söz konusudur. Bunun başka bir örneğine gelince, reverse_eachdaha hızlı çalışır reverse.each. Bu yöntemlerin var olma nedenleri vardır.
reverse, örneğin, reversebir dizi, ve sayimm dönüyor. Bir numaralandırıcı döndürdüyse, iyi bir uygulama ile daha yavaş olmaması gerekirdi.
with_indexofset, bir başlangıç endeksi izin verirwith_indexile bağlantılı olarak kullanıldığında, genel olarak tercih edilirmap,reduce,collectvb Kısaca,map.with_indexdaha iyi okureach_with_index.map. Bir anlamda, birlikte kullanıldığındamap, var olmayanmap_with_indexyöntemin yerini alır.