From: matz@... (Yukihiro Matsumoto) Date: 1997-07-26T09:36:32+09:00 Subject: [ruby-list:3487] Re: meta programming features まつもと ゆきひろです In message "[ruby-list:3426] Re: meta programming features" on 97/07/24, 石塚圭樹 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#メソッド定義 |> 名前はModule#define_methodで良いと思うのですが,どういう |> APIにしましょうか? |> |> Foo.define_method("foo") do |arg| |> .. |> end |> |> なんてのも変な気がしますが | |これって実現可能なんですか? コンパイル時にイテレータと認識したものをメ |ソッドの定義部に置き換えているわけですよね? 可能です.メソッドボディは def foo(*args) proc.call(*args) end と同様になるでしょうから実際のメソッド定義とは若干挙動が違う のですが. |メソッド定義部を文字列で渡したい時もそれなりにあるので, このような, 全 |て文字列で指定できるのも欲しいですね. 問題はパラメータの指定ですが, いっ |そのこと: | | Foo.define_method("def foo(arg) ...end") | |みたいな指定でもかまいませんが? うーん,これだとevalと変わらないなあ.やっぱりそういうメソッ ドを作った方が良いんでしょうかねえ.そうすれば,定数・メソッ ド定義なども一気に解決できますねえ. |そうですねぇ. こういう操作は明示的にクラススコープの内部で行うべきだと |いう意見でしたっけ? あと, プライベートなのは間違いを少なくしたいという |意味もあるのかな? そうです. |それでしたら, それと分かる別名を作ってそれをpublicにするというてもあり |ますね. | | Module#public_method | Module#make_public | Module#to_public | |などなどのように. うーん,なるほど. |# ところで, aliasしたメソッドだけをpublicにできましたっけ?? ええと,出来るはずです. まつもと ゆきひろ /:|)