From: Kenichi Komiya Date: 2001-03-03T18:03:33+09:00 Subject: [ruby-list:28460] Re: constant in module_eval 小宮です。 From: matz@zetabits.com (Yukihiro Matsumoto) Subject: [ruby-list:28459] Re: constant in module_eval Date: Sat, 3 Mar 2001 16:19:16 +0900 > まつもと ゆきひろです > |class Foo で普通に定義したときの連想で、Foo.new.bar に 'bar' を期 > |待したのですが、どうしてこうなってしまうのでしょうか? > > 定数の参照は静的に決まるから(つまりmodule_evalの外側と同じも > のを参照しているということ)。 回答ありがとうございます。ただ、まだいまひとつ理解しきれません。 ブロックの中は外と同じ定数を指すというのであればそれはそれで理解で きるのですが、クラスのコンテキストではクラス自身の定数を参照してい るように見えるのが不思議です。 class Foo; end Foo.module_eval do Bar = 'bar' puts Bar # これは Foo::Bar def bar; Bar; end # これは外のBar end それはどうと、class expr構文([ruby-list:28311])を見たとき、 def Class(klass, &definition) klass.module_eval(&definition) end はどうかな?と思ったのですが、こういうルールだとツラそうですね。 小宮 健一