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

Sta*_*tan 83 ruby

我真的很困惑each.with_index和之间的区别each_with_index.它们有不同的类型,但在实践中似乎完全相同.

bla*_*ide 154

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
Run Code Online (Sandbox Code Playgroud)

输出:

2: foo
3: bar
4: baz

0: foo
1: bar
2: baz
Run Code Online (Sandbox Code Playgroud)


saw*_*awa 40

each_with_index之前被引入Ruby.with_index后来介绍:

  1. 允许更广泛地使用各种调查员.
  2. 允许索引从除以外的数字开始0.

今天,with_index从通用性和可读性的角度来看,使用会更好,但从加速代码的角度来看,each_with_index运行速度要快一些each.with_index.

当您认为通过简单链接几种方法可以轻松表达单个方法时,通常情况下单个方法比链更快.至于另一个例子,reverse_each运行速度比reverse.each.这些方法有理由存在.

  • 我不认为perf应该是不同的(至少不是很大).在`reverse`示例中,`reverse`返回另一个数组,而不是枚举器.如果它返回了一个枚举器,那么一个好的实现它应该不会慢. (2认同)