Skip to content

End of Life Ruby 3.2 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →

instance method

Range#step

step(n = 1) {|element| ... } → self
step(n = 1) → enumerator

Iterates over the elements of self.

With a block given and no argument, calls the block each element of the range; returns self:

Example
a = []
(1..5).step {|element| a.push(element) } # => 1..5
a # => [1, 2, 3, 4, 5]
a = []
('a'..'e').step {|element| a.push(element) } # => "a".."e"
a # => ["a", "b", "c", "d", "e"]

With a block given and a positive integer argument n given, calls the block with element 0, element n, element 2n, and so on:

Example
a = []
(1..5).step(2) {|element| a.push(element) } # => 1..5
a # => [1, 3, 5]
a = []
('a'..'e').step(2) {|element| a.push(element) } # => "a".."e"
a # => ["a", "c", "e"]

With no block given, returns an enumerator, which will be of class Enumerator::ArithmeticSequence if self is numeric; otherwise of class Enumerator:

Example
e = (1..5).step(2) # => ((1..5).step(2))
e.class            # => Enumerator::ArithmeticSequence
('a'..'e').step # => #<Enumerator: ...>

Related: Range#%.

See also #size #to_a #minmax #to_json also in 4.1 · 4.0 · 3.4 · 3.3 · 3.1 · 3.0