我对 each.with_index
和 each_with_index
的区别感到非常困惑。它们的类型不同,但在实践中似乎是相同的。
我对 each.with_index
和 each_with_index
的区别感到非常困惑。它们的类型不同,但在实践中似乎是相同的。
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
则在后来引入:
今天,从通用性和可读性的角度来看,使用with_index
会更好,但从代码加速的角度来看,each_with_index
比each.with_index
稍微快一些。
当你觉得一个单独的方法可以通过简单的方法链表达时,通常情况下,单独的方法比链式调用更快。另一个例子是reverse_each
比reverse.each
运行得更快。这些方法都有它们存在的原因。