web-dev-qa-db-ja.com

Rubyで中断して戻る場合、どのように使用しますか?

question に戻りについて尋ねたところ、breakと同じことをしているようです。 returnをどのように使用し、breakをどのように使用するか(これらの構成を使用する可能性のある問題を解決するために作成する実際のコードなど)。

これらの使い方がわからないので、実際に例を投稿することはできません。

25
thenengah

Returnは、関数全体を終了します。

Breakは最も内側のループを終了します。

したがって、次のような関数では:

def testing(target, method)
  (0..100).each do |x|
    (0..100).each do |y|
     puts x*y
     if x*y == target
       break if method == "break"
       return if method == "return"
     end
    end 
  end
end

違いを確認するには、次を試してください:

testing(50, "break")
testing(50, "return")
74
stef

breakはループの内側から呼び出されます。それはあなたがいる最も内側のループの直後にあなたを置きます。

returnはメソッド内から呼び出されます。それはあなたがそれを伝える値を返し、それが呼び出された場所の直後にあなたを置きます。

4
Null Set

例を簡略化するために承認済みの回答を編集したかったのですが、新しい回答を作成するよう提案されたため、編集は拒否されました。これは私の簡略版です:

def testing(target, method)
  (1..3).each do |x|
    (1..3).each do |y|
     print x*y
     if x*y == target
       break if method == "break"
       return if method == "return"
     end
    end 
  end
end

試してみて違いがわかります:

testing(3, "break")
testing(3, "return")

最初の(breakステートメントの結果は、3に到達):

1232463

最後の結果(関数全体を終了するreturnステートメント):

123
1
Karol Selak

もう1つの例は、1つのメソッドに2つのループがあり、最初のループから出て2番目のループに進みたい場合、最初のループでbreakを使用するか、その逆の場合です。

def testing(method)
x=1
  10.times do
    if(x == 2)
     break if method == "break"
    end
   x+=1
  end
  10.times do
   if(x == 5)
     return if method == "return"
   end
  x+=1
  end 
end
0
srikanth