Feature #15093


Retrive Array elements with infinite ranges specified by Float::INFINITY

Added by v0dro (Sameer Deshmukh) almost 4 years ago. Updated almost 4 years ago.

Target version:


Currently in Ruby head (2.6) the following gives an error:

2.6-head :001 > a = [1,2,3,4]
# => [1, 2, 3, 4] 
2.6-head :002 > a[0..Float::INFINITY]
#Traceback (most recent call last):
#        2: from /home/sameer/.rvm/rubies/ruby-2.6-head/bin/irb:11:in `<main>'
#        1: from (irb):2
#RangeError (float Inf out of range of integer)

I think Array should support infinite ranges created by Float::INFINITY as well
since 0..nil and 0..Float::INFINITY are both supposed to create 'infinite' ranges
and having different behavior for each of them is inconsistent.

Updated by shevegen (Robert A. Heiler) almost 4 years ago

I can not say much about the reasoning (I am neutral there) but
I agree in one regards - if we use a large number, we get all
Array members:

a = [1,2,3,4] # => [1, 2, 3, 4]
a[0..111111111] # => [1, 2, 3, 4]

So from this point of view, in this context, infinity could also
mean a very large number, in which case the operation should
or could be treated like any other high number.

But I think matz has to have a look at this since it correlates
with the topic of infinity (and to some extent "ranges"; not so
much in this example alone necessarily, but I think infinity has
to do with ranges as well).

Updated by marcandre (Marc-Andre Lafortune) almost 4 years ago

This could be fixed, at least in theory, but in practice this is no longer an issue: use endless range

a[0...] # => [1, 2, 3, 4]

I'm unsure if we should change the behavior, since it allows catching of subtle errors where the result of a calculation returns Float::INFINITY.


Also available in: Atom PDF