control_flow/throw_and_tap.rb
tests/_examples/control_flow/throw_and_tap.rb in the metorex repository.
result = catch(:done) do
10.times do |i|
throw :done, i if i == 3
end
:never
end
puts result.inspect
puts catch(:plain) { throw :plain }.inspect
begin
throw :one, :two, :three
rescue ArgumentError => error
puts "#{error.class}: #{error.message}"
end
begin
throw
rescue ArgumentError => error
puts error.class
end
begin
throw :no_catch_for_this
rescue UncaughtThrowError => error
puts error.class
end
class Widget
def name
"widget"
end
end
widget = Widget.new
tapped = widget.tap { |w| w.name }
puts tapped.equal?(widget)
puts widget.tap { :ignored }.equal?(widget)
begin
3.tap
rescue LocalJumpError => error
puts "#{error.class}: #{error.message}"
end
puts Object.new.respond_to?(:taint)
puts Object.new.respond_to?(:tainted?)
Output:
3
nil
ArgumentError: wrong number of arguments (given 3, expected 1..2)
ArgumentError
UncaughtThrowError
true
true
LocalJumpError: no block given (yield)
false
false