4

Poignant Guide中给出了这个redo关键字的例子:

class LotteryTicket
  def self.new_random
    new(rand(25) + 1, rand(25) + 1, rand(25) + 1)
  rescue ArgumentError
    redo
  end
end

它应该一直调用new,直到所有三个随机数都是唯一的。但是在我输入这段代码并运行了几次之后,我得到了这个错误:LocalJumpError: unexpected redo. 我在redo别处查找了关键字,看起来它只适用于循环和迭代器。那么为什么在他的例子中尝试这样使用它呢?应该如何重写此方法才能正常工作?

4

2 回答 2

9

他一定是有意使用retry,不是redo

于 2009-03-22T07:53:44.377 回答
3

redo重新启动一个块:

l = lambda {puts "hi"; redo}
l.call
于 2011-06-13T22:48:27.520 回答