2011-01-05 5 views
21

Я только что спросил question о возврате и, похоже, делает то же самое, что и break. Как вы используете возврат, и как вы используете разрыв, например, в фактическом коде, который вы пишете, чтобы решить проблемы, которые могут использовать эти конструкции.перерыв и возврат в рубине, как вы их используете?

Я не могу опубликовать примеры, потому что я не знаю, как их использовать, поэтому они не имеют большого смысла.

+1

Возможный дубликат [Как выйти из блока ruby?] (Http://stackoverflow.com/questions/1402757/how-to-break-out-from-a-ruby-block) –

ответ

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

ah ha, I видеть. хороший пример. – s84

+0

согласился, это действительно хороший пример! спасибо за разъяснение – wmock

+2

Также имейте в виду, что использование возврата внутри proc, вызываемого изнутри метода, также приведет к возврату метода. Обязательно посмотрите на различия между лямбдами и проками. –

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 
Смежные вопросы