Issue #19231 has been updated by kyanagi (Kouhei Yanagita).
```
% docker run -it --rm rubylang/all-ruby env ALL_RUBY_SINCE=ruby-1.3 ./all-ruby -e 'inf
= 1.0/0.0; 0.step(inf, 10) { |x| p x; break }'
ruby-1.3 /tmp/rbFgfjB4:1:in `/': divided by 0 (ZeroDivisionError)
from /tmp/rbFgfjB4:1
exit 1
ruby-1.3.1-990215 0
...
ruby-1.6.8 0
ruby-1.8.0 0.0
...
ruby-2.0.0-p648 0.0
ruby-2.1.0-preview1 0
...
ruby-3.3.0-preview2 0
```
The behavior seems to have changed in version 1.8.0 due to
https://github.com/ruby/ruby/commit/936ad40.
The behavior seems to have changed in version 2.1.0 due to
https://github.com/ruby/ruby/commit/fd4b5b8.
The issue is
https://bugs.ruby-lang.org/issues/8838.
I think the behavior change in Ruby 1.8.0 was likely not intentional but rather
accidental.
I couldn't find any documentation indicating that the behavior change in Ruby 2.1.0
was intentional.
There is no mention in NEWS-2.1.0 either.
----------------------------------------
Bug #19231: Integer#step and Float::INFINITY - inconsistent behaviour when called with and
without a block
https://bugs.ruby-lang.org/issues/19231#change-104953
* Author: andrykonchin (Andrew Konchin)
* Status: Open
* Priority: Normal
* ruby -v: 3.1.2
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
The initial issue was reported here
https://github.com/oracle/truffleruby/issues/2797.
`0.step(Float::INFINITY, 10)` returns:
- `Integers` when called with a block
- `Floats` when called without a block
I would expect `Floats` to be returned in both cases.
Examples:
```ruby
0.step(Float::INFINITY, 10).take(1).map(&:class)
=> [Float]
```
```ruby
0.step(Float::INFINITY, 10) { |offset| p offset.class; break }
# Integer
```
When `to` argument is a finite `Float` value then calling with a block returns `Floats` as
well:
```ruby
0.step(100.0, 10) { |offset| p offset.class; break }
# Float
```
Wondering whether it's intentional behaviour.
I've found a related issue
https://bugs.ruby-lang.org/issues/15518.
--
https://bugs.ruby-lang.org/