Ruby中each.with_index和each_with_index的区别是什么?

124

我对 each.with_indexeach_with_index 的区别感到非常困惑。它们的类型不同,但在实践中似乎是相同的。

2个回答

217

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

57

each_with_index是早期引入Ruby的方法,而with_index则在后来引入:

  1. 为了允许在不同枚举器中更广泛地使用。
  2. 为了允许索引从数字0以外的数字开始。

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

当你觉得一个单独的方法可以通过简单的方法链表达时,通常情况下,单独的方法比链式调用更快。另一个例子是reverse_eachreverse.each运行得更快。这些方法都有它们存在的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接