2016-07-12 7 views
0

を与えられた条件に従ってすべてのループを終了する必要があり、私はすべてのループを終了することができとにかくありますか?は、上記の条件をのみ、内側のループを終了</p> <pre><code>a.each do |i| b.each do |j| c.each do |k| d.each do |m| if somecondition.eql?true break end end end end end </code></pre> <p>以下のように、私は5つのループを持つ内部ループで

+0

- あなたは5を持っていない機能と「リターン」 – Sergius

+0

使用するためにそれをすべて移動し、次の4つのを持っています。 – sawa

答えて

0

すべてのループをメソッドに入れた場合、ループを中断するには、returnを使用します。

def loop_method(a,b,c,d) 
    a.each do |i| 
    b.each do |j| 
     c.each do |k| 
     d.each do |m| 
      return if somecondition.eql?true 
     end 
     end 
    end 
    end 
end 

ループ内部のループは、一般的には素晴らしいアイデアではありません。パフォーマンスは通常ひどく、コードはデバッグ/フォローするのが難しくなります。だから、行くべき良い方法かもしれない事を単純化する(多分再帰)方法があれば。

+0

上記のループを再帰の形でどのように使うことができますか教えてください。 – Gopal

+0

もっと文脈が必要です。どこから来る 'a'、' b'、 'c'、' d'はどこですか?ループの目的は何ですか?そのようなもの。 – Albin

+0

私はあなたがどこにいたらいいでしょう。まずコードをメソッドに移動します。そのまま動作することを確認してください。それを簡単にするために変更することができたら、少し時間をかけてください。 – Albin

3

標準的な方法は、catchthrowです。オプションとして

catch :foo do 
    a.each do |i| 
    b.each do |j| 
     c.each do |k| 
     d.each do |m| 
      if somecondition.eql?true 
      throw :foo 
     end 
     end 
     end 
    end 
    end 
end 
+2

これまでのところ最高の答えです。私はこれを必要としなかったし、私は 'キャッチ 'を知らなかった。ありがとう! – mudasobwa

関連する問題