トップ «前の日記(2007-12-07) 最新 次の日記(2007-12-13)» 編集

Ussy Diary


2007-12-11

[Ruby]loop と while true

Ruby には loop というものがあり、 while true とどう違うのか今イチ分かりませんでした。

メーリングリストでまつもとさんが答えていました。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/20222

制御構造であるwhileとイテレータであるloopの間の本質的な違いはloopの方はループ本体がブロックである点です。そしてブロックは新たなスコープを導入します。

loop がイテレータとは。

loop do
  hoge = "hoge"
  break
end
puts defined?(hoge)

while true
  hoge = "hoge"
  break
end
puts defined?(hoge)

実行結果

nil
local-variable

用途によって使い分ける必要がありますが、 loop のほうが直感的で 分かりやすいと感じました。

まず ri loop で調べればよかったです。 Kernel モジュールで宣言されている単なるメソッドでした。