人気ブログランキング | 話題のタグを見る

loop do と while true の違い。

無限ループを回すのに、loop do と while true はどう使い分けたらいいのか不思議に思ったので検索したら、まつもと ゆきひろ さん自身の解説が見つかった。

loop do と while true の二つのプログラムを動作させてみると、loop do では、変数 abc に数値を代入しているはずなのに、次に abc を評価させてもエラーになってしまう。

C:\Users\******>irb
irb(main):001:0> loop do
irb(main):002:1*   print "-> ", eval(gets), "\n"
irb(main):003:1> end
abc = 123
-> 123
abc
NameError: undefined local variable or method `abc' for main:Object

irb(main):004:0> while true
irb(main):005:1>   print "-> ", eval(gets), "\n"
irb(main):006:1> end
abc = 123
-> 123
abc
-> 123
exit

loop の場合はブロックなので、内部で定義された変数のスコープはブロック内に限られてしまうらしい。loop do というのは、loop という関数を何回も呼び出し続ける動作をするのだろう。したがって、loop 内の変数は、loop 外の変数の名前空間を汚さない。snrb で気を使ってアンダースコアー付きの変数にしていたのは無駄骨だったのだ。

プログラム言語というのも作者の意図が分からないとうまく使いこなせないのだろうか。しかし、ソースは読めないし....
by tnomura9 | 2008-10-12 08:26 | Ruby | Comments(0)
<< DRY utf-8 が使えるコマンドプ... >>