# module Steppable

## Overview

Implements a `#step` method for iterating from a value.

steppable.cr

## Instance Method Detail

def step(*, to limit = nil, by step, exclusive : Bool = false, &) : Nil #

Iterates from `self` to limit incrementing by the amount of step on each iteration. If exclusive is `true`, limit is excluded from the iteration.

``````ary = [] of Int32
1.step(to: 4, by: 2) do |x|
ary << x
end
ary                                        # => [1, 3]
1.step(to: 4, by: 2).to_a                  # => [1, 3]
1.step(to: 4, by: 1).to_a                  # => [1, 2, 3, 4]
1.step(to: 4, by: 1, exclusive: true).to_a # => [1, 2, 3]``````

The type of each iterated element is `typeof(self + step)`.

If to is `nil`, iteration is open ended.

The starting point (`self`) is always iterated as first element, with two exceptions:

• if `self` and to don't compare (i.e. `(self <=> to).nil?`). Example: `1.0.step(Float::NAN)`
• if the direction of to differs from the direction of `by`. Example: `1.step(to: 2, by: -1)`

In those cases the iteration is empty.

def step(*, to limit = nil, by step, exclusive : Bool = false) #

Iterates from `self` to limit incrementing by the amount of step on each iteration. If exclusive is `true`, limit is excluded from the iteration.

``````ary = [] of Int32
1.step(to: 4, by: 2) do |x|
ary << x
end
ary                                        # => [1, 3]
1.step(to: 4, by: 2).to_a                  # => [1, 3]
1.step(to: 4, by: 1).to_a                  # => [1, 2, 3, 4]
1.step(to: 4, by: 1, exclusive: true).to_a # => [1, 2, 3]``````

The type of each iterated element is `typeof(self + step)`.

If to is `nil`, iteration is open ended.

The starting point (`self`) is always iterated as first element, with two exceptions:

• if `self` and to don't compare (i.e. `(self <=> to).nil?`). Example: `1.0.step(Float::NAN)`
• if the direction of to differs from the direction of `by`. Example: `1.step(to: 2, by: -1)`

In those cases the iteration is empty.