--- !ruby/object:RI::MethodDescription 
aliases: []

block_params: 
comment: 
- !ruby/struct:SM::Flow::P 
  body: <tt>catch</tt> executes its block. If a <tt>throw</tt> is executed, Ruby searches up its stack for a <tt>catch</tt> block with a tag corresponding to the <tt>throw</tt>'s <em>symbol</em>. If found, that block is terminated, and <tt>catch</tt> returns the value given to <tt>throw</tt>. If <tt>throw</tt> is not called, the block terminates normally, and the value of <tt>catch</tt> is the value of the last expression evaluated. <tt>catch</tt> expressions may be nested, and the <tt>throw</tt> call need not be in lexical scope.
- !ruby/struct:SM::Flow::VERB 
  body: "   def routine(n)\n     puts n\n     throw :done if n &lt;= 0\n     routine(n-1)\n   end\n\n   catch(:done) { routine(3) }\n"
- !ruby/struct:SM::Flow::P 
  body: <em>produces:</em>
- !ruby/struct:SM::Flow::VERB 
  body: "   3\n   2\n   1\n   0\n"
full_name: Kernel#catch
is_singleton: false
name: catch
params: |
  catch(symbol) {| | block }  > obj

visibility: public
