Подтвердить что ты не робот

Перерыв и возврат в рубине, как вы их используете?

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

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

4b9b3361

Ответ 1

Возврат завершается из всей функции.

Перерыв выходит из самого внутреннего цикла.

Таким образом, в такой функции:

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

Ответ 2

break вызывается изнутри цикла. Он поместит вас сразу после самого внутреннего цикла, в котором вы находитесь.

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

Ответ 3

Я хотел бы отредактировать одобренный ответ, чтобы упростить пример, но мое редактирование было отклонено с предложением дать новый ответ. Итак, это моя упрощенная версия:

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

Ответ 4

Еще один пример может быть, если у вас есть два цикла в одном методе, и если вы хотите выйти из первого цикла и продолжить использовать второй цикл, используйте первый цикл или наоборот:

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