Techioz Blog

Ruby でアウターサイクルを破るにはどうすればよいですか?

概要

Perl には、次のように外部サイクルを破る機能があります。

AAA: for my $stuff (@otherstuff) {
         for my $foo (@bar) {
             last AAA if (somethingbad());
         }
      }

(構文が間違っている可能性があります)。これは、ループ ラベルを使用して、内側のループの内側から外側のループを分割します。 Rubyにも同様のものはありますか?

解決策

スロー/キャッチを考慮してください。通常、以下のコードの外側のループは 5 回実行されますが、throw を使用すると、プロセス内で中断して好きなものに変更できます。この完全に有効な Ruby コードを考えてみましょう。

catch (:done) do
  5.times { |i|
    5.times { |j|
      puts "#{i} #{j}"
      throw :done if i + j > 5
    }
  }
end