loopメソッド

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

loopメソッドは、終了条件のない繰り返しのメソッドです。
動作としては、以下に書くように、「while true」と書いた場合と同じ動作となりますので、繰り返し処理を記述するブロック内において、break文などでループを抜けなければなりません。
でなければ、無限ループとなり、メモリを使い果たします。

追記(2009年5月8日)
コメントにて、tさんよりご指摘を頂いたので修正しました。
上記、打ち消し線を引いた箇所は、変数のスコープという観点から、厳密には間違いです。
loopとwhile trueは、同じ動作とならない場合があります。
loopとwhile trueの違いを検証したエントリーを書きました。参考:loop と while true の違い - Ruby入門勉強ルーム

count = 0
loop do
    puts "Hello, Ruby !"
    if count == 3
        break
    end
    count += 1
end
 
num = 0
while true do
    puts "while case : Hello, Ruby !"
    if num == 3
        break
    end
    num += 1
end

実行結果。

Hello, Ruby !
Hello, Ruby !
Hello, Ruby !
Hello, Ruby !
while case : Hello, Ruby !
while case : Hello, Ruby !
while case : Hello, Ruby !
while case : Hello, Ruby !

日時: 2008年06月23日 21:32

コメント (2)

"「while true」と書いた場合と同じ動作となります"とあるのは、厳密には誤りです。loopはブロックを引数にとる関数です。制御構造であるwhileとは変数のスコープが異なります。たとえば、以下の二つのスクリプトは異なった動作を示します。

#------------------------------
loop do
var = "test"
puts var
break
end
puts var

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

投稿者: t | 日時: 2009年05月07日 12:43

tさん、ご指摘ありがとうございました。
loopは、メソッドなので「var = "test"」のスコープがブロックの中に閉じ込められるのですね。

投稿者: TAKA | 日時: 2009年05月08日 01:56



コメントを投稿






トラックバック

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

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



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






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