我对 each.with_index和 each_with_index之间的区别感到非常困惑。他们有不同的类型,但在实践中似乎是相同的。
each.with_index
each_with_index
with_index方法使用一个可选参数来偏移起始索引。each_with_index做同样的事情,但是没有可选的起始索引。
with_index
例如:
[: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
产出:
2: foo 3: bar 4: baz 0: foo 1: bar 2: baz
each_with_index was introduced into Ruby earlier. with_index was introduced later:
0
如今,从通用性和可读性的角度来看,使用 with_index会更好,但从加快代码的角度来看,each_with_index的运行速度略快于 each.with_index。
当您觉得单个方法可以通过简单地链接几个方法来轻松地表示时,通常情况下,单个方法比链接快。至于这方面的另一个例子,reverse_each运行速度比 reverse.each快。这些方法有存在的理由。
reverse_each
reverse.each