From: Shin-ichiro Hara Date: 1997-03-20T04:36:53+09:00 Subject: [ruby-list:2396] Re: eval()'s context 原です。 > これも「文字列から」という点では eval だけど、「動的に」という点では > eval の特徴ではないですよね。 > > while $input = gets > class Foo > def bar > print "Your input : #$input" > end > end > foo = Foo.new > foo.bar > end > > というコードは成立する。 ああ、これじゃあ、 class Foo def bar print "Your input : #$input" end end while $input = gets foo = Foo.new foo.bar end とほとんど同じだからめちゃくちゃ例が悪いですね。(^^; こうすればいいのかな。 while $input = gets if $input.length > 3 class Foo def bar print "Your input length > 3\n" end end else class Foo def bar print "Your input length <= 3\n" end end end foo = Foo.new foo.bar end でも、次の例を考えて石塚さんの言っている意味も 分かった気がしました。 $input = "abc" def bar print "input = #$input\n" end $input = "efg" bar # => input = efg $input = "abc" eval("def bar print \"input = #$input\n\" end") $input = "efg" bar # => input = abc