Issue #19231 has been updated by mrkn (Kenta Murata).
`0.step(Float::INFINITY, 10).each` generates Float values until Ruby 2.0 and after Ruby
2.6, but it generates Integer values between Ruby 2.1 and 2.5. The reason why the
behavior changes after Ruby 2.6 is due to ArithmeticSequence.
`0.step(Float::INFINITY, 10) { ... }` generates Float values until Ruby 2.0, but it
generates Integer values after Ruby 2.1.
Hence it's also possible that the right behavior is to generate Integer values rather
than Float. We need to know the reason for the behavior change in Ruby 2.1.
----------------------------------------
Bug #19231: Integer#step and Float::INFINITY - inconsistent behaviour when called with and
without a block
https://bugs.ruby-lang.org/issues/19231#change-100624
* 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/