BLOGTIMES
2014/10/30

Ruby の大域脱出

  ruby 
このエントリーをはてなブックマークに追加

Ruby でネストしたループから脱出する(大域脱出)方法を忘れてしまっていたので、忘れないようにメモ。

Java の大域脱出はラベル付き break*1 / continue *2で実現されていますが、Ruby は Kernel.#throw*3 / Kernel.#catch*4 で実現されています。
ラベルを渡すこと以外は raise / rescure と同じような感じですね。

例えばネストした配列があって、これを順に取り出して 100 が見つかったら終了という処理はこんな感じで書けます。

arrs = [[1,2,3,4,5], [10,20,30,40,50], [100,200,300,400,500], [1000,2000,3000,4000,5000] ] catch(:break) do arrs.each do |arr| arr.each do |n| puts "n = #{n}" throw :break if n == 100 end end end

実際に実行するとこんな感じ。うまく動きました。

n = 1 n = 2 n = 3 n = 4 n = 5 n = 10 n = 20 n = 30 n = 40 n = 50 n = 100

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/7157
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン