loop と while true
Rubyのloopとwhile trueは、どちらも無限ループするのですが、メソッドと制御構造という違いがあるので、変数のスコープが異なる。
loopではブロック内でだけ変数が有効であり、while trueはwhile文を抜けたあとでも変数が有効である。
(loop)
puts 'loopでは、変数のスコープがブロックに閉じ込められる' loop do loop_val = 'hogehoge' puts loop_val break end puts loop_val
(実行結果)
$ ruby loop.rb loopでは、変数のスコープがブロックに閉じ込められる hogehoge loop.rb:7: undefined local variable or method `loop_val' for main:Object (NameError)
(while true)
puts 'while trueでは、変数のスコープがwhile文に閉じ込められない' while true while_val = 'hogehoge' puts while_val break end puts while_val
(実行結果)
$ ruby while.rb while trueでは、変数のスコープがwhile文に閉じ込められない hogehoge hogehoge