control_flow/kernel_loop.rb

tests/_examples/control_flow/kernel_loop.rb in the metorex repository.

count = 0
loop do
  count += 1
  break if count == 10
end
puts count

puts loop { break 123 }.inspect
puts loop { break }.inspect

attempts = 0
result = loop do
  attempts += 1
  raise StopIteration if attempts == 3
end
puts attempts
puts result.inspect

class Finished < StopIteration
end

reached = 0
loop do
  reached += 1
  raise Finished
end
puts reached

anonymous_finish = Class.new StopIteration
loop do
  raise anonymous_finish
end
puts "anonymous subclass ended the loop"

begin
  loop do
    raise ArgumentError, "not swallowed"
  end
rescue ArgumentError => error
  puts "#{error.class}: #{error.message}"
end

puts Kernel.private_instance_methods(false).include?(:loop)

Output:

10
123
nil
3
nil
1
anonymous subclass ended the loop
ArgumentError: not swallowed
true