Ruby中的each.with_index和each_with_index之间的区别?

我真的很困惑each.with_indexeach_with_index之间的区别。 他们有不同的types,但实际上似乎是相同的。

with_index方法采用一个可选参数来抵消起始索引。 each_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被引入Ruby。 with_index稍后介绍:

  1. 以允许各种统计员更广泛的使用。
  2. 允许索引从0以外的数字开始。

今天,从通用性和可读性的angular度来看,使用with_index会更好,但是从加速代码的angular度来看, each_with_indexeach.with_index稍快。

当你觉得单一的方法可以通过简单的几个方法链接来expression,通常情况下,单一的方法比链更快。 至于另一个例子, reverse_each运行速度比reverse.each快。 这些方法有理由存在。