redo
繰り返し処理の中で「redo」が実行されると今実行している繰り返しを改めて初めから行います。「next」との違いは「next」は次の繰り返しへ進みますが「redo」は同じ繰り返しを最初から行います。
「redo」は次のように使用します。
count = 0 ("aa".."ae").each{|str| count += 1 if count % 3 == 0 then redo end print(count, ":" + str + "¥n"); }
上記では範囲オブジェクト「"aa".."ae"」に対して「each」メソッドを使って順に要素を取り出し画面に表示しています。同時に繰り返しを1回行う毎に変数「count」の値を1だけ加算しています。変数「count」の値が3で割り切れる場合、「redo」によって同じ繰り返しが改めて行われます。
例えば「each」メソッドのよって「ac」が取り出されて繰り返しが行われた場合、変数「count」の値は「3」となっているため「redo」によって繰り返しが改めて行われます。繰り返しが改めて行われるというのは取り出される要素が同じで改めて繰り返しが最初から実行されるということです。この場合「each」メソッドによって先ほどと同じ「ac」が取り出されて改めて繰り返しが行われますが、変数「count」の値は元に戻っていませんので今度は「4」となります。よって繰り返しは最後まで実行されます。
なおやり直される繰り返しは現在実行している繰り返しです。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku count = 0 print("[start]¥n") ("aa".."ae").each{|str| count += 1 if count % 3 == 0 then redo end print(count, ":" + str + "¥n"); } print("[end]¥n")
上記のプログラムを「test11-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )