2011-01-05 14 views
21

Właśnie zapytałem o powód question i wygląda na to, że robi to samo co przerwa. W jaki sposób używasz return i jak używać breaku, na przykład w rzeczywistym kodzie, który piszesz, aby rozwiązać problemy, które mogą wykorzystać te konstrukcje.złamać i wrócić w Ruby, jak z nich korzystać?

Nie mogę opublikować przykładów, ponieważ nie wiem, jak ich używać, aby nie miały większego sensu.

+1

możliwy duplikat [Jak wyrwać się z bloku rubinowego?] (Http://stackoverflow.com/questions/1402757/how/to-break-out-from-a-ruby-block) –

Odpowiedz

54

Powrót z całej funkcji.

Przerwa w wyjściu z najbardziej wewnętrznej pętli.

Tak więc, w zależności tak:

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 

Aby zobaczyć różnicę, spróbuj:

testing(50, "break") 
testing(50, "return") 
+0

ah ha, I widzieć. dobry przykład. – s84

+0

zgodził się, to naprawdę dobry przykład! dziękuję za wyjaśnienie. – wmock

+2

Należy również pamiętać, że użycie zwrotu w procesie, który jest wywoływany z wewnątrz metody, spowoduje również powrót metody. Sprawdź różnice między lambdami i procami. –

4

przerwa nazywana jest od wewnątrz pętli. Ustawi cię tuż po najbardziej wewnętrznej pętli.

powrót jest wywoływany z wewnątrz metod. Zwróci wartość, którą Ci przekażesz i umieści Cię zaraz po wywołaniu.

1

Chciałem edytować zatwierdzoną odpowiedź, aby uprościć przykład, ale moja edycja została odrzucona z sugestią dotyczącą nowej odpowiedzi. Więc to jest moja wersja uproszczona:

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 

widzimy różnicę starając:

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

Wyniki pierwszego (break oświadczenie wychodzenia wewnętrznej pętli tylko przy 3 osiągnięta):

1232463 

Wyniki ostatniego (return wyciągu kończącego całą funkcję):

123 
0

Jeszcze Przykładem może być, jeśli masz dwie pętle w jednej metody, a jeśli chcesz wyjść z pierwszej pętli i dalej do drugiego użytku pętla przerwie w pierwszej pętli lub odwrotnie:

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 
Powiązane problemy