BLOGTIMES
2015/12/07

ruby の break は case を抜けられない

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

Ruby の break はループからの脱出専用なので、ループでない case を抜けられないことを知らなくてハマってしまったのでメモ。

test.rb

x = 1 case x when 1 break puts "1" else puts "else" end

たとえばこんなプログラムを書いて実行してみるとわかりますが、break の部分で LocalJumpError になってしまいます。

$ ruby test.rb test.rb:4: unexpected break (LocalJumpError)

ドキュメントを改めて調べてみると、以下のような記載があり case を抜けられないと明記されています。

制御構造 (Ruby 2.0.0)

break はもっとも内側のループを脱出します。ループとは
while
until
for
イテレータ
のいずれかを指します。C 言語と異なり、break はループを脱出する作 用だけを持ち、case を抜ける作用は持ちません。

この部分の代替方法について記載がないので困りましたが、以前大域脱出の時に使った throw / catch を使ってひとまず実装することができました。


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

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

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

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