Exceptions/Catch an exception thrown in a nested call: Difference between revisions

Content added Content deleted
(C# implementation)
(add Ruby)
Line 367: Line 367:


Uncaught exceptions give information showing where the exception originated through the nested function calls together with the name of the uncaught exception, (U1) to stderr, then quit the running program.
Uncaught exceptions give information showing where the exception originated through the nested function calls together with the name of the uncaught exception, (U1) to stderr, then quit the running program.

=={{header|Ruby}}==
Uses a global variable to count the number of calls to baz
<lang ruby>def foo
begin
bar
rescue U0
puts "captured exception U0"
end
end

def bar
baz
end

def baz
raise $bazcount == 1 ? U0 : U1
end

class U0 < Exception
end

class U1 < Exception
end

for $bazcount in [1, 2]
foo
end</lang>
<pre>$ ruby nested_calls.rb
captured exception U0
nested_calls.rb:14:in `baz': U1 (U1)
from nested_calls.rb:10:in `bar'
from nested_calls.rb:3:in `foo'
from nested_calls.rb:24
from nested_calls.rb:23:in `each'
from nested_calls.rb:23</pre>
Wait, why does <code>in `each'</code> appear in the stack trace? There's no each in that code. Ruby translates this
<lang ruby>for $bazcount in [1, 2]
foo
end</lang>
to this
<lang ruby>[1, 2].each {|$bazcount| foo}</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==