From: matz@... (Yukihiro Matsumoto) Date: 1997-07-15T03:28:33+09:00 Subject: [ruby-list:3347] Re: module context and dynamic class define [Re: meta programings] まつもと ゆきひろです In message "[ruby-list:3344] module context and dynamic class define [Re: meta programings]" on 97/07/14, 石塚圭樹 writes: |けいじゅ@今はフリー(^^;;;です. |># 実はパスが正しく定義されないとmarshalで問題が起きるんです |># けど. | |うーん. どういう点で? オブジェクトからクラスへの参照をこのパス表現で |fileにセーブしているからですね? そういうことです. |こうやって考えると, クラスのパス表現はクラスの一意性のためになくてはな |らないものと考えた方がいいんですかね? そう考えた方がよいです.が,いつでも信頼できるパスが生成でき るわけではないんですね.たとえば,今回のようなクラスを生成す るAPIを用意してしまえば,かならずしもパスでアクセスできない クラスをつくってしまうことが出来るわけです. |動的にクラスを生成する時に, 絶対パス表現または, 上位パスクラスも加える |のはどうでしょう? | |foo = Module.new("class-name", super_class, upper_class) {...} | |これなら, パスの問題はなくなりますよね? upper_classの定数として新しく定義されたモジュールがバインド されるわけですね.そういうことを強制できるんでしたら,パスの 問題は確かになくなりますね. |あ. そうそう. この問題と class-contextの話しはリンクしているとおもいま |す. | | a = Foo::Bar::Baz | module a | ... | end | |が実現できれば, 動的にクラスが生成できる独自メソッドはそれほど必要性は |ないかもしれません. この場合,module/classは積極的に既に存在するクラスやモジュー ルを拡張する機能を持つことになりますね.今はクラスの機能拡張 は「おまけ」的な扱いなんですが. |>文字列でなく,コードオブジェクトを直接生成するというのはruby |>の範囲を越えるという印象が強いです.どうでしょう? そういう | |何か誤解があるかな? ソースコードを文字列として生成してevalして, メソッ |ドを定義できればいいだけですけども... なんか誤解があるみたい.^^;;; まつもと ゆきひろ /:|)