From: Koji Arai Date: 2002-04-19T04:08:22+09:00 Subject: [ruby-dev:16967] Re: Module::new with block is useful? 新井です。 In message "[ruby-dev:16924] Re: Module::new with block is useful?" on Tue, 16 Apr 2002 12:00:49 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > > In message "[ruby-dev:16923] Module::new with block is useful?" > on 02/04/16, "Shin'ya Adzumi" writes: > > |1.7 で Module::new(Module#initialize) に、ブロック付きで呼ばれたら > |module_eval を呼ぶようになっているのですが、これはどういう使い道を > |想定しているのでしょうか? このケースで、nested method definition にする理由ってあるの でしょうか?コンテキストが完全に切り替わるので、定義できても 良いように思うのですが。 > トップレベルで無名クラスを作ることを想定しています。 気がつかなかった。マニュアルに書いておくかなあ。 「トップレベル」に限りませんよね? # 二度定義しても怒られない定数定義の例 2.times {|$i| class Foo include Module.new { FOO = $i Foo = $i } end p Foo::FOO p Foo::Foo } # あっ module_eval 使ってもできるか 2.times {|$i| class Foo include Module.new.module_eval { FOO = $i Foo = $i self } end p Foo::FOO p Foo::Foo } # こんなことすると、あんま使いものにならないことがわかる(^^; # これはボツだな。 p Foo.ancestors # => [Foo, #, #, Object, Kernel] -- 新井康司 (Koji Arai)