けいじゅ@今はフリー(^^;;;です. In [ruby-list :03410 ] the message: "[ruby-list:3410] Re: meta programming features ", on Jul/23 08:30(JST) matz / netlab.co.jp (Yukihiro Matsumoto) writes: >|# やっぱ, クラスは宝ですから(^^;;; 個人的には heirlooms がイメージに... > >じゃあ legacy でしょう. > >とはいえ,rubyではわりとオーソドックスにまとめていて,極力新 >しい用語は導入していないんで,全く新しい用語には抵抗があるん >ですけど. そうですか... >例示された中では ingredients くらいならなんか伝わる気がしま >すけど. やっぱ, flavors ですかねえ... >Module#instance_methods, Object#methodsで納得しました.これ >は作りましょう. OK. >|もしかしたらコンパイル時(起動時)に決定される?? > >以下のことが静的に決定されます. > > * ある識別子がローカル変数かどうか > * あるローカル変数が動的ローカル変数かどうか なるなる. >|a1 = "Foo" >|eval "A = a", Foo.class_binding.add_bind{|a| a = a1} > >これでも外側のスコープでaがローカル変数として代入されている >場合とそうでない場合で挙動が違ってしまいます. そうなんだ, a = "Foo" proc{|a| a = "Bar"}.call print a ======================= Foo となるという意味? >|a = "Foo" >|eval "|a| A = a", Foo.class_binding, a > >evalじゃない別のものになってしまいますけど,これはこれで意味 >があるのかなあ. 別のものですか... >|a = "Foo" >|eval "A = a", Foo.class_binding, :a => a >| >|みたいな... > >こっちはだめです.rubyのローカル変数はコンパイル時にスタック >フレームに対するオフセットにまで展開されてしまいますから(し >かもスタックフレームは共有している),シンボルを与えて束縛を >オーバーライドするようなやり方はむずかしいです. うーん. なるほど... ところで, バインディングってどんなオブジェクトなん です? >クラススコープが必要な操作に対して(たとえば定数を外部から定 >義するような)個別のAPIを定義する方向にしませんか? そうですね. 何か複雑になってしまいました(@@;;;; そうすると, 考えられるAPIとしては: Module#モジュール定義 Module#クラス定義 Module#定数定義 Module#メソッド定義 Module#alias Module#undef ぐらいですか. あと, Module/Class 関係のメソッドでprivateなメソッドがあ りますが, それをpublicにする必要がありますね. __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju / bc.mbn.or.jp <<---