From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-16T22:17:14+09:00 Subject: [ruby-list:3362] Re: module context and dynamic class define [Re: meta programings] けいじゅ@今はフリー(^^;;;です. In [ruby-list :03356 ] the message: "[ruby-list:3356] Re: module context and dynamic class define [Re: meta programings] ", on Jul/16 08:44(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >ですね.module構文の拡張は止めましょう. 了解しました. ただし, イテレータを使う可能性はまだあるとして:: >|> * イテレータのバインディングは変えられない >|> * メソッド内でメソッドが定義できない >|> * 定数のスコープがごっちゃになる >|> * デフォルトのprivate/publicのスコープにあわない >上から順番に > * 最初のはあんまり問題ではない それならいいのですが... > * こういうコードが書けない > > def foo > Class.new("Bar", Object) { > def bar > ... > end > } > end > * 良く考えたらこれも問題ではない それならいいのですが... > * こういうコードで定義されるメソッドがprivateになる > > Class.new { > def bar > ... > end > } > >となります. とすると, メソッド定義だけが問題になっているのかな? 定数に関しては問題 ない? それであれば, 以下のようにしなくてはいけないという制約がついても良いと 思いますよ:: def foo Class.new("Bar", Object) { Baz = "Hoge Hoge" eval "def bar ... end" } end つまり, メソッド定義はevalを使わなくてなならない. 動的にクラスを定義す る時は, メソッドのコードも動的であることが多いと思いますし, それほど問 題にならないと思います. ああ. でも, この場合: def foo code = "def bar ... end" Class.new("Bar", Object) { Baz = "Hoge Hoge" eval code } end は可能になります? イテレータのバインディング云々はこういうことができな いことを意味している?? >|あと, これは動的クラス生成でもイテレータは使えないことを意味しているん >|ですよね? > >そうです.メソッド定義のネストチェックは外せないことはないと >思うんですけど,デフォルトのprivateの指定はあんまり変えたく >ないです. なるほど. __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---