From: matz@... (Yukihiro Matsumoto) Date: 2000-01-15T10:54:16+09:00 Subject: [ruby-list:20222] Re: while TRUE と loop の違いを教えてください まつもと ゆきひろです In message "[ruby-list:20221] while TRUE と loop の違いを教えてください" on 00/01/15, Sakae Kobayashi writes: |[sakae@t515m]$ cat test.rb |loop do | print "-> ", eval(gets), "\n" |end | |[sakae@t515m]$ ruby test.rb |abc=123 |-> 123 |abc |test.rb:2: (eval):1: undefined local variable or method `abc' for # (NameError) |しかし、loop do を while TRUE に変更すると何の問題もなく、期待する動作を |してくれます。 | |この違いはどのように解釈したらよろしいのでしょうか? 制御構造であるwhileとイテレータであるloopの間の本質的な違い はloopの方はループ本体がブロックである点です。そしてブロック は新たなスコープを導入します。 この場合、新しいスコープで初出の変数であるabcはブロック内で だけ有効で、loopの次の回の繰り返しの時には消滅してしまいます。 たとえば、loopの前に変数 abc に対する代入が行われていれば、 abcの有効範囲がメソッド全体になりますから、ブロックの実行終 了によって消滅することはありません。 まつもと ゆきひろ /:|)