catch([arg]) {|tag| block } â obj
Instance Public methods
catch
executes its block. If a throw
is executed,
Ruby searches up its stack for a catch
block with a tag
corresponding to the throw
's tag. If found, that
block is terminated, and catch
returns the value given to
throw
. If throw
is not called, the block
terminates normally, and the value of catch
is the value of
the last expression evaluated. catch
expressions may be
nested, and the throw
call need not be in lexical scope.
def routine(n) puts n throw :done if n <= 0 routine(n-1) end catch(:done) { routine(3) }
produces:
3 2 1 0
when arg is given, catch
yields it as is, or when no
arg is given, catch
assigns a new unique object to
throw
. this is useful for nested catch
.
arg can be an arbitrary object, not only Symbol.
Please login to continue.