loop と while true の違い

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

以前、loopメソッド - Ruby入門勉強ルームというエントリーで、loopはwhile trueと同義だと書いていたのですが、厳密には間違いでした。
繰り返しという目的においては類似しているが、変数のスコープが違います。
ご指摘を頂き気付いたのですが、loopはメソッドであり、ブロックに変数のスコープが閉じ込められる。
一方、while true と書いた場合、これは制御文になるので、こちらはwhile文を抜けた後でも、変数が有効になる。
コメントでサンプル文も頂いたので、codepadでそのまま実行してみました。

loopメソッド

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 文

while true
  var = "test"
  puts var
  break
end
puts var

実行結果。

test
test

while true のほうは、繰り返しを抜け出た後でも、変数varが出力されている。


日時: 2009年05月08日 01:56
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/475

この記事にトラックバックされる方は、参照先が分かるようにするために、「loop と while true の違い」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - Ruby勉強ルーム