symbols_and_ranges/allocated_range.rb

tests/_examples/symbols_and_ranges/allocated_range.rb in the metorex repository.

# A range written as a literal is frozen the moment it is made, so the only
# range whose ends can still be written is one `allocate` handed back.
held = Range.allocate
held.send :initialize, 3, 7, true

p held.begin
p held.end
p held.exclude_end?

# Both ends have to be comparable with each other.
begin
  Range.allocate.send :initialize, Object.new, Object.new
rescue ArgumentError => error
  puts error.message
end

# A range that is already built refuses to be written again.
begin
  (0..1).send :initialize, 1, 3
rescue FrozenError => error
  puts error.class
end

Output:

3
7
true
bad value for range
FrozenError