Я только начинаю работать в Ruby, но руководство, которому я следую, похоже, устарело.Я проводил некоторые исследования, но не смог найти четкого ответа.
В руководстве использовалось ключевое слово retry внутри метода, который должен действовать как цикл, но он используется безблок begin / rescue, и поведение кажется довольно разным, когда вы заставляете ключевое слово retry находиться внутри блока begin / rescue.
Я пробовал много вещей: -Первый использовал "ключевое слово begin в начале метода и повышение в точке повтора, за которым следует соответствующее спасение;повторить попытку;конец;'.-Последний использовал блок 'begin / rescue' снаружи, оборачивая вызов метода.
Следуя логике в руководстве, только последний работал должным образом.
Вот несколько примеров:
Код в руководстве выглядит следующим образом:
def WHILE(cond)
return if not cond
yield
retry
end
i=0; WHILE(i<3) {print i; i+=1}
Результат: 012
Я пробовал следующее:
def WHILE(cond)
begin
return if not cond
yield
raise
rescue
retry
end
end
i=0; WHILE(i<3) {print i; i+=1}
результат: бесконечные числа
def WHILE(cond)
return if not cond
yield
end
i=0; begin; WHILE(i<3) {print i; i+=1}; raise; rescue; retry; end
результат: 012 (плюс очевидный бесконечный цикл печати ничего)
Я ожидаю вас отизбавив меня от этого экзистенциального сомнения, но вот мой вывод.
До обязательного использования блока begin / rescue для ключевого слова 'retry' его можно было использовать таким образом, которого он больше не может, повторение вызова метода, несмотря на то, что находится внутри этого метода .
Теперь он просто переходит к оператору 'begin'.
Но я не уверен в этом, и мне нужно подтверждение.И если да, существует ли какая-либо форма для восстановления такого рода использования?
Спасибо.