kind=defined
names=catch
visibility=public

--- catch(tag) {|tag| .... } -> object

[[m:Kernel.#throw]]との組み合わせで大域脱出を行います。 catch はブロックを実行します。

ブロックの実行中に tag と同じ名前の [[m:Kernel.#throw]] が行われた
場合は、その throw の第二引数を戻り値として、ブロックの実行を終了します。

主にネストしたループから一気に脱出するのに使用します。

@param tag シンボルや文字列などシンボル化できるものです。
@return ブロックの返り値か、対応するthrowの第二引数を返り値として返します。

  result = catch(:tag) do
    for i in 1..2
      for j in 1..2
        for k in 1..2
          throw :tag, k
        end
      end
    end
  end
  
  p result #=> 1

@see [[m:Kernel.#throw]]

