2011-01-05 16 views
21

我剛剛問了一個question關於退貨,它似乎與break一樣。你如何使用return,以及如何使用break,例如在編寫的實際代碼中解決可以使用這些構造的問題。紅寶石破解和返回,你如何使用它們?

我真的不能發表例子,因爲我不知道如何使用這些,所以他們沒有太大的意義。

+1

可能重複的[如何從紅寶石塊爆發?](http://stackoverflow.com/questions/1402757/how-to-break-out-from-a-ruby-block) – 2012-08-15 21:34:25

回答

54

退出整個功能。

中斷退出最內層循環。

因此,在功能,像這樣:

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") 
+0

啊哈,我看到。好例子。 – s84 2011-01-05 07:49:31

+0

贊同,這是一個非常好的例子!感謝您的澄清 – wmock 2013-02-28 18:55:18

+2

也請記住,在方法內部調用的proc中使用return也會導致方法返回。確保查找lambda和proc之間的差異。 – 2013-04-05 03:16:21

4

斷裂從循環中調用。它會將你置於最後的循環之後。

返回值是從方法內部調用的。它會返回你告訴它的值,並將它放在被調用的地方。

1

我想編輯已批准的答案以簡化示例,但我的編輯被拒絕,並提出了製作新答案的建議。所以這是我的簡化版本:

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 
0

還有一個例子是,如果你有兩個循環的一個方法,如果你想出來的第一圈,並繼續第二循環利用突破在第一循環反之亦然:

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