From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-28T16:30:54+09:00 Subject: [ruby-list:3517] Re: meta programming features けいじゅ@今はフリー(^^;;;です. これは, ruby-devに引っ越します. 行きなり引っ越すのも何なので ruby-list にもCcしておきます. 次回リプライを下さる人は, Cc削って下さい(__ # ruby-dev1号になるかな?? In [ruby-list :03487 ] the message: "[ruby-list:3487] Re: meta programming features ", on Jul/26 09:36(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >| superclasses_and_mixins # 長過ぎるかな... >| superclasses_and_includes # これも... >| roots # mixinは祖先とはいえないかなあ... >| higher_hierarchies # 上の階層というつもりなんだけど... >| super_modules # ちょっと造語 > >も,ちょっと考えさせてください.こういう長いのも悪くないので >すが…. もう出尽くした感じです. 名前の決定は任せます. >| Module#constant(name) >| Module#constant(name) = >現在の文法では代入に引数を付けられないことを忘れていました. > > Obj.attr = val > >はできても > > Obj.attr(args) = val > >は文法エラーになるんですねえ.作者がこんなことでどうするんで >しょう. おお. そういえばそうですね. 了解了解. >|>| Module#メソッド定義 >|> Foo.define_method("foo") do |arg| >|> .. >|> end >|これって実現可能なんですか? コンパイル時にイテレータと認識したものをメ >|ソッドの定義部に置き換えているわけですよね? > >可能です.メソッドボディは > > def foo(*args) > proc.call(*args) > end > >と同様になるでしょうから実際のメソッド定義とは若干挙動が違う >のですが. ああ. なるほど... ちょっと嬉しくない(;_; >|メソッド定義部を文字列で渡したい時もそれなりにあるので, このような, 全 >|て文字列で指定できるのも欲しいですね. 問題はパラメータの指定ですが, いっ >|そのこと: >| >| Foo.define_method("def foo(arg) ...end") >| >|みたいな指定でもかまいませんが? > >うーん,これだとevalと変わらないなあ.やっぱりそういうメソッ >ドを作った方が良いんでしょうかねえ.そうすれば,定数・メソッ >ド定義なども一気に解決できますねえ. # 話しが戻っている... まあ, それはいいとして 気がつきませんでしたが, 確かに evalと同じですね. ただ, メソッド定義の 場合は, 普通のevalと違って, eval内で変数を渡す必要はほとんどないと思う のでこのままでも簡単に実現可能だと思うのですが, 定数の場合はそうは行き ませんよね. Bar = "Hogehoge" eval "Foo = Bar", Foo.class_binding みたいなことはできないですしね. ただ, その問題さえ解決すれば, 定数設定でもevalで全然問題ないと思います. あと, もう1つの案としては, 定数設定のAPIは残しておいて, メソッド定義は, 通常の(変数を渡せない)evalを用いるという組合せでもよいかと思います. >|それでしたら, それと分かる別名を作ってそれをpublicにするというてもあり >|ますね. >| Module#public_method >| Module#make_public >| Module#to_public >うーん,なるほど. >|# ところで, aliasしたメソッドだけをpublicにできましたっけ?? >ええと,出来るはずです. じゃあ. 今な感じでaliasを採用するのはどうですかね? ケアレスミスは避け ることができるようになると思いますし... __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---