4

for ループと同様に、whenブロックの実行をスキップするステートメントを探しています。breakこれは可能ですか?

私が避けたいのは、次のような構成です。

case n
  when 1
    if valid
      foo.bar
    end
  when 2
    if valid
      foo.foo
  end

より望ましいコード ブロックは次のようになります。

case n
  when 1
    break unless valid
    foo.bar
  when 2
    break unless valid
    foo.foo
  end

明らかに、うまくいきbreakません。

4

3 に答える 3

6

同等だがより簡潔:

case n
  when 1
    foo.bar if valid
  when 2
    foo.foo if valid
  end
end

条件が実際にすべてのケースに当てはまる場合は、事前に確認できます。

if valid
  case n
    when 1
      foo.bar
    when 2
      foo.foo
    end
  end
end

どちらもうまくいかない場合は、簡単に答えてください。いいえ、breakルビの case ステートメントに相当するものはありません。

于 2012-11-03T15:07:46.380 に答える
2

私は常に、ルビ文の最後に条件文を追加するのが好きです。これにより、コードがより簡単で読みやすくなります。これは、ルビーが知られているものです。あなたの質問に対する私の答えは次のようになります。

case n
when 1
    foo.bar
when 2
    bar.foo
end unless !valid
于 2012-11-03T23:14:01.323 に答える