From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-16T02:44:08+09:00 Subject: [ruby-list:3354] Re: module context and dynamic class define [Re: meta programings] けいじゅ@今はフリー(^^;;;です. In [ruby-list :03351 ] the message: "[ruby-list:3351] Re: module context and dynamic class define [Re: meta programings] ", on Jul/15 23:25(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >|この考えはこのまま維持した方が良いのでは? と思うのですがどうなんでしょ >|う? > >うーん,たしかに.C APIでは > > * トップレベルにクラス/モジュールを定義するAPI > * あるクラス/モジュールの内部にクラス/モジュールを定義するAPI > >しか提供されていませんからね.これでパスが維持されているわけ >ですから,ruby meta APIでも踏襲されるべきでしょうね.クラス/ >モジュールには必ずパスが設定されるAPIにしましょう. 了解しました. >|うーん. なるほど確かにそうでしたね. 積極的に宣伝していませんね(^^;;; >しかも -w オプションでは警告が出ますし. うぅ... そうだったんだっけ... >|既存クラスの機能拡張は, あまり望ましくないんですかねえ?? >微妙ですよね.クラスをどういうものと捉えるかにもよると思うの >ですが,少なくとも初期のrubyはクラスやモジュールを比較的静的 >なものと考えていたために,それを反映して機能追加に警告を出す >ことにしていたのだと思います. 間違いをなくすという意味もあるんでしょうね. つまり, 偶然別のクラスを同 じ名前で定義するとか... そういったことで考えると, 機能拡張用の別APIをMPF(meta programing features)として用意して頂いた方がよいかなって気がしてきました. でも:: >|foo = Module.new("Baz", nil, Foo::Bar) { >| ... >|} >そうかもしれないんですが,実際に作って試したところ,イテレー >タでクラス定義本体を表現するのは > * イテレータのバインディングは変えられない > * メソッド内でメソッドが定義できない > * 定数のスコープがごっちゃになる > * デフォルトのprivate/publicのスコープにあわない > >など,問題が多発したので,あんまり採用したくないんです. なるほど... といいたいのですが, 以上の点で何が問題になるのか理解できて いないんですが... あと, これは動的クラス生成でもイテレータは使えないことを意味しているん ですよね? __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---