From: matz@... (Yukihiro Matsumoto) Date: 1998-06-17T10:43:16+09:00 Subject: [ruby-list:8379] Re: what type are true and false まつもと ゆきひろです In message "[ruby-list:8377] Re: what type are true and false" on 98/06/16, "YANAGAWA Kazuhisa" writes: | たとえば | | ruby-1,0 filnal: | eval "foo = 0" | print "#{foo}\n" | -> 0 | が, | ruby-1.1b9_6 以降(それ以前の 1.1 がないのでここまで): | eval "foo = 0" | puts foo | -> NameError | | なのは何でなの,とか? この動作の違い("#{foo}"はOK,fooはダメ)は1.0の頃からです.で, その理由は ローカル変数はコンパイル時に代入される必要がある というものです.つまり,後者ではfooが参照されるレベルではロー カル変数fooに代入が行われていないので,fooという識別子をロー カル変数と見なすことができないのです.一方,前者では式展開 (の為のコンパイル)はevalの後に動的に行われるので,fooはロー カル変数であると見なされます. | しかも sample の rbc では 1.0 と同じ動作をし | たりする. これはrbcのエミュレーションが不完全だからですね.irbだとまし になってるんじゃないでしょうか? まつもと ゆきひろ /:|)