Ruby重试语句

时间:2018-12-17 08:17:42

标签: ruby

我正在关注tutorial,并一直阅读到loops。从教程中,我希望得到:

Value of local variable is 1
Value of local variable is 2
Value of local variable is 1
Value of local variable is 2
Value of local variable is 1
Value of local variable is 2
............................

但是我得到了这个

Value of local variable is 0
Value of local variable is 1
Value of local variable is 2

这是我使用的代码,与本教程完全相同

#!/usr/bin/ruby

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

我有什么想念吗?

2 个答案:

答案 0 :(得分:2)

正如其他人所述,retry现在仅限于rescue个区块。如果您想重新制作示例,则必须将其包装在开始中……救援:

begin
  for i in 0..5
    raise "too big" if i > 2
    puts "Value of local variable is #{i}"
  end
rescue
  retry
end

答案 1 :(得分:1)

您错过了这一点:从Ruby编程语言(2008年出版的一本书,由Matz合着,涵盖了Ruby 1.8和1.9):“(...)在Ruby 1.8中,retry具有另一个用途:从一开始就开始基于迭代器的迭代(或任何方法调用),retry语句的这种用法非常少见,并且已从Ruby 1.9中的语言中删除。被视为已弃用的语言功能,不应在新代码中使用。”(第152页)。 运行OP的代码至少在Ruby 2.3之后会导致语法错误。 Invalid retry (SyntaxError)