разбить и вернуть в ruby, как вы их используете? - PullRequest
24 голосов
/ 05 января 2011

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

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

Ответы [ 4 ]

71 голосов
/ 05 января 2011

Возврат выходов из всей функции.

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

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

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")
4 голосов
/ 05 января 2011

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

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

1 голос
/ 18 мая 2017

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

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 голосов
/ 13 ноября 2017

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

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
...