redoとretryの違い


why's poignant guide to rubyを読んでいて、

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

をやってみたらLocalJumpErrorになったので、redoをretryに直したらエラーが出なくなりました。


redoとretryの違いはループでその回をもう一度やるか、ゼロ(1)から再度やるかの違いと覚えていたので、ちょっと悩み中。