けいじゅ@今はフリー(^^;;;です. 

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 <<---