difference between each.with_index and each_with_index in Ruby?

后端 未结 2 1107
离开以前
离开以前 2020-12-08 03:39

I\'m really confused about the difference between each.with_index and each_with_index. They have different types but seem to be identical in practi

相关标签:
2条回答
  • 2020-12-08 04:20

    The with_index method takes an optional parameter to offset the starting index. each_with_index does the same thing, but has no optional starting index.

    For example:

    [: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
    

    Outputs:

    2: foo
    3: bar
    4: baz
    
    0: foo
    1: bar
    2: baz
    
    0 讨论(0)
  • 2020-12-08 04:26

    each_with_index was introduced into Ruby earlier. with_index was introduced later:

    1. to allow wider usage with various enumerators.
    2. to allow index to start from a number other than 0.

    Today, using with_index would be better from the point of view of generality and readability, but from the point of view of speeding up the code, each_with_index runs slightly faster than each.with_index.

    When you feel that a single method can be easily expressed by straightforward chaining of a few methods, it is usually the case that the single method is faster than the chain. As for another example of this, reverse_each runs faster than reverse.each. These methods have reason to exist.

    0 讨论(0)
提交回复
热议问题