以前、loopメソッド - Ruby入門勉強ルームというエントリーで、loopはwhile trueと同義だと書いていたのですが、厳密には間違いでした。
繰り返しという目的においては類似しているが、変数のスコープが違います。
ご指摘を頂き気付いたのですが、loopはメソッドであり、ブロックに変数のスコープが閉じ込められる。
一方、while true と書いた場合、これは制御文になるので、こちらはwhile文を抜けた後でも、変数が有効になる。
コメントでサンプル文も頂いたので、codepadでそのまま実行してみました。
loop do var = "test" puts var break end puts var
実行結果。
Line 6: undefined local variable or method `var' for main:Object (NameError) test
loopメソッドの場合、6行目でエラーが出ており、loopメソッドを抜け出た後は、varっていう変数は定義されていないよ、と注意されています。
while true var = "test" puts var break end puts var
実行結果。
test test
while true のほうは、繰り返しを抜け出た後でも、変数varが出力されている。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/475