From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-15T18:22:43+09:00 Subject: [ruby-list:3348] Re: module context and dynamic class define [Re: meta programings] けいじゅ@今はフリー(^^;;;です. In [ruby-list :03347 ] the message: "[ruby-list:3347] Re: module context and dynamic class define [Re: meta programings] ", on Jul/15 03:28(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >|こうやって考えると, クラスのパス表現はクラスの一意性のためになくてはな >|らないものと考えた方がいいんですかね? > >そう考えた方がよいです.が,いつでも信頼できるパスが生成でき >るわけではないんですね.たとえば,今回のようなクラスを生成す >るAPIを用意してしまえば,かならずしもパスでアクセスできない >クラスをつくってしまうことが出来るわけです. これはそのようなAPIを作った場合ですよね? 今のところは, このパスが識別 子となっているわけですよね? この考えはこのまま維持した方が良いのでは? と思うのですがどうなんでしょ う? >|foo = Module.new("class-name", super_class, upper_class) {...} > >upper_classの定数として新しく定義されたモジュールがバインド >されるわけですね.そういうことを強制できるんでしたら,パスの >問題は確かになくなりますね. そうです. upper_classが省略されたらトップレベルで定義されるということ で. >| a = Foo::Bar::Baz >| module a >| ... >| end > >この場合,module/classは積極的に既に存在するクラスやモジュー >ルを拡張する機能を持つことになりますね.今はクラスの機能拡張 >は「おまけ」的な扱いなんですが. うーん. なるほど確かにそうでしたね. 積極的に宣伝していませんね(^^;;; 既存クラスの機能拡張は, あまり望ましくないんですかねえ?? それではこれ はどうでしょう? foo = Module.new("Baz", nil, Foo::Bar) { ... } つまり, 先ほどの動的クラス生成のメソッドで, そのクラスがすでに存在して いる場合は新たにクラスを生成せずにそのクラスをそのまま返し, さらにその クラスのコンテキストでイテレータを評価する. というのは? これだと動的クラス生成機能のおまけとして, 動的クラス機能追 加ができるようになります. これだと, (静的)クラス定義と対象性があってい いかも知れない? >|何か誤解があるかな? ソースコードを文字列として生成してevalして, メソッ >|ドを定義できればいいだけですけども... >なんか誤解があるみたい.^^;;; まあいいでしょうこっちは(^^;;; __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---