Actions
Bug #21513
openConverting endless range to set hangs
Description
Converting endless range to array raises:
ruby -e '(1..).to_a'
-e:1:in 'Range#to_a': cannot convert endless range to an array (RangeError)
from -e:1:in '<main>'
but converting to set does not:
ruby -e '(1..).to_set # hangs'
I think it makes to raise in both cases for consistency. Something like this should do the trick:
diff --git i/prelude.rb w/prelude.rb
index f49cada637..11bfa3fc95 100644
--- i/prelude.rb
+++ w/prelude.rb
@@ -30,6 +30,10 @@ module Enumerable
# Makes a set from the enumerable object with given arguments.
# Passing arguments to this method is deprecated.
def to_set(*args, &block)
+ if self.class == Range && self.end.nil?
+ raise RangeError, "cannot convert endless range to a set"
+ end
+
klass = if args.empty?
Set
else
diff --git i/test/ruby/test_range.rb w/test/ruby/test_range.rb
index f875c0ab40..27b968641b 100644
--- i/test/ruby/test_range.rb
+++ w/test/ruby/test_range.rb
@@ -1541,4 +1541,11 @@ def test_overlap?
assert_not_operator((1...3), :overlap?, (3..4))
assert_not_operator((...3), :overlap?, (3..))
end
+
+ def test_to_set
+ assert_equal(Set[], (1..-1).to_set)
+ assert_equal(Set[1, 2, 3], (1..3).to_set)
+
+ assert_raise(RangeError) { (239..).to_set }
+ end
end
If this patch is accepted, I'll open a PR.
./ruby -v
ruby 3.5.0dev (2025-07-14T20:34:32Z master a6d483971a) +PRISM [x86_64-linux]
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0