けいじゅ@今はフリー(^^;;;です. meta programming 関係と eval関係に分かれているので, 2つに割ります. # evalもmeta programming の一種だけど... In [ruby-list :03419 ] the message: "[ruby-list:3419] Re: meta programming features ", on Jul/24 07:34(JST) matz / netlab.co.jp (Yukihiro Matsumoto) writes: >|やっぱ, flavors ですかねえ... >ですかねえ.もうちょっとかんがえましょう. じゃあ, もう少し案を: superclasses_and_mixins # 長過ぎるかな... superclasses_and_includes # これも... roots # mixinは祖先とはいえないかなあ... higher_hierarchies # 上の階層というつもりなんだけど... super_modules # ちょっと造語 とか... >|そうすると, 考えられるAPIとしては: >| Module#モジュール定義 > Module#newが使えるようになります. >| Module#クラス定義 > Class#newが使えるようになります. 了解. >| Module#定数定義 > Module#set_constant(name, value)にしましょう. ああ. こうしますか? 以前あった Module#constant(name) Module#constant(name) = は? # 定数参照を忘れていました. >| Module#メソッド定義 > 名前はModule#define_methodで良いと思うのですが,どういう > APIにしましょうか? > > Foo.define_method("foo") do |arg| > .. > end > > なんてのも変な気がしますが これって実現可能なんですか? コンパイル時にイテレータと認識したものをメ ソッドの定義部に置き換えているわけですよね? それはともかく, こういう, メソッド定義部がイテレータで指定できるのも便 利でいいのですが, > Foo.define_method("foo", "arg", "...") > > よりはましな気がします("..."はメソッドの定義部). メソッド定義部を文字列で渡したい時もそれなりにあるので, このような, 全 て文字列で指定できるのも欲しいですね. 問題はパラメータの指定ですが, いっ そのこと: Foo.define_method("def foo(arg) ...end") みたいな指定でもかまいませんが? >| Module#alias > Module#alias_method(new, old)にしましょう. >| Module#undef > Module#undef_method(name)にしましょう. 了解. >|ぐらいですか. あと, Module/Class 関係のメソッドでprivateなメソッドがあ >|りますが, それをpublicにする必要がありますね. >public,private,module_functionなどですか? あと, include ぐらいかな? >うーん,そうした方が良いのでしょうか.せっかくprivateになっているのに >なあ,という気もしますが.…仕方ないか. そうですねぇ. こういう操作は明示的にクラススコープの内部で行うべきだと いう意見でしたっけ? あと, プライベートなのは間違いを少なくしたいという 意味もあるのかな? それでしたら, それと分かる別名を作ってそれをpublicにするというてもあり ますね. Module#public_method Module#make_public Module#to_public などなどのように. # ところで, aliasしたメソッドだけをpublicにできましたっけ?? __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju / bc.mbn.or.jp <<---