Эквивалент «продолжить» в Ruby


648

В Си и многих других языках есть continueключевое слово, которое при использовании внутри цикла переходит на следующую итерацию цикла. Есть ли эквивалент этого continueключевого слова в Ruby?


4
continue не «перезапускает» циклы, но переходит к следующей итерации цикла.
Мэтт Кринкло-Фогт

1
@mlaw: я отредактировал свой вопрос соответственно, чтобы избежать путаницы в будущем.
Марк Шимански

7
@dbr дубликат, который вы нашли, был задан после этого.
Дрооганс

Ответы:


934

Да, это называется next.

for i in 0..5
   if i < 2
     next
   end
   puts "Value of local variable is #{i}"
end

Это выводит следующее:

Value of local variable is 2
Value of local variable is 3
Value of local variable is 4
Value of local variable is 5
 => 0..5 

13
Вот как я помню - Руби уважает Perl ( next) выше C ( continue)
Полковник Panic

111

next

также посмотрите, redoчто повторяет текущую итерацию.


39
... потому что рубин рад так.
Мэтт Уолтерс

1
Руби многое позаимствовал у Perl, включая redoкоманду Perl (или ее сущность, в любом случае). Для интерпретации Руби, найдите «повторить» на этой странице .
MarkDBlackwell


42

Внутри для петель и итератора методов , как eachи mapв nextключевом слове в рубине будет иметь эффект перехода к следующей итерации цикла (такой же , как continueв С).

Однако на самом деле он просто возвращает из текущего блока. Таким образом, вы можете использовать его с любым методом, который принимает блок - даже если он не имеет ничего общего с итерацией.


а также хорошее повторное заявление
Сигурд



1

Используйте следующее, оно обойдет это условие, и остальная часть кода будет работать. Ниже я предоставил полный сценарий и положил

class TestBreak
  puts " Enter the nmber"
  no= gets.to_i
  for i in 1..no
    if(i==5)
      next
    else 
      puts i
    end
  end
end

obj=TestBreak.new()

Выход: введите число 10

1 2 3 4 6 7 8 9 10

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.