有可能使用`retry`关键字内联`if`?

时间:2015-12-02 09:46:29

标签: ruby if-statement inline

我必须使用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多线方法的情况下,使这种内联ifend子句一起使用?

3 个答案:

答案 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。有关正确使用重试的信息,请参阅例外。"