4

心に訴えるガイドでは、このredoキーワードの例が示されています。

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

new3 つの乱数がすべて一意になるまで、呼び出しを続けることになっています。しかし、このコードを入力して数回実行した後、次のエラーが発生しました: 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 に答える