begin ~ rescue ~ end
内でのnext
は、rescue
には関係せずに外側のループに作用するんだよな、と確認したかったのでやってみた。
(Ruby 1.9.3)
10.times do |i|
retry_counter = 0
begin
raise
rescue
retry_counter += 1
if retry_counter <= 5
puts i.to_s + ": retry"
retry
else
puts "retried 5 times so go to next loop"
next
end
end
end
結果
0: retry
0: retry
0: retry
0: retry
0: retry
retry 5 times so go to next loop
1: retry
1: retry
1: retry
1: retry
1: retry
retry 5 times so go to next loop
(中略)
9: retry
9: retry
9: retry
9: retry
9: retry
retry 5 times so go to next loop
そういえば、(1.9以降だと)retryは繰り返し構造に作用しないし、繰り返し構造でのやり直しはredoだと思い出したのは、コレを書き終えたあとでしたw
###redo
ループ条件のチェックを行なわず、現在の繰り返しをやり直します。
###retry
retry は、rescue 節で begin 式をはじめからもう一度実行するのに使用します。
制御構造(るりま 1.9.3)