我必须使用begin
- rescue
- end
块来包围所有内容。我编写的代码如下:
begin
bet = Dialogs.enter_your_bet
approx.calculate_average_profit(bet)
approx.print_profits_table
retry if Dialogs.play_again?
rescue;retry
end
行retry if Dialogs.play_again?
导致以下错误:
./main:14: Invalid retry
./main: compile error (SyntaxError)
是否可以在没有常规retry
- if
多线方法的情况下,使这种内联if
与end
子句一起使用?
答案 0 :(得分:4)
retry
适用于rescue
块(或迭代器中)。它适用于if
。试试这个:
begin
bet = Dialogs.enter_your_bet
approx.calculate_average_profit(bet)
approx.print_profits_table
rescue
retry if Dialogs.play_again?
end
答案 1 :(得分:1)
好的,谢谢大家的答案!我明白什么是问题,但你的解决方法并不是我需要的。实际上,救援部分用于在用户非法输入的情况下重新启动输入提示,而我的“重试”则是inside begin是从另一个用户输入重启块(y / n问题)。
经过一番调查后,这段代码可以完美运行:
begin
loop do
bet = Dialogs.enter_your_bet(gapes[0],gapes[1])
approx.calculate_average_profit(bet)
approx.print_profits_table
break if !Dialogs.play_again?
end
rescue;retry
end
再次感谢社区如此活跃。小心!
答案 2 :(得分:0)
redo用于控制流程。
引用文档:"在Ruby 1.8中,您还可以使用重做的地方重做。这已不再适用,现在当您在救援块之外使用重试时,您将收到SyntaxError。有关正确使用重试的信息,请参阅例外。"