From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-11T18:04:59+09:00 Subject: [ruby-list:3330] Re: meta programming features けいじゅ@今はフリー(^^;;;です. いつのまにかforkしている... In [ruby-list :03329 ] the message: "[ruby-list:3329] meta programming features ", on Jul/11 11:58(JST) matz@caelum.co.jp (Yukihiro Matsumoto) writes: >メタプログラミング系の機能について考えてみたいと思います. >基本的に複雑な機能を導入するつもりはないので,今どうがんばっ >てもできない機能を追加することが基本になると思います. まあいいんじゃないですか. ほとんどは, XXX.rbレベルでできますし. ああ. でも, できてもひじょーにめんどくさくなるのもサポートしてもらえる と... >んで,列挙系の機能が全くないので > > Module#constants > Object#methods > >のような機能は必要だと思います.実装はそれほど大変ではないの >ですが,列挙される範囲はどこまでかを定義する必要があります. > >つまり,たとえば定数であれば,そのモジュール(クラス)で定義さ >れた定数だけを列挙するのか,それともそのクラスの内部コンテキ >ストで定数として参照できる全てのもの(全てのクラス名を含む)か >ということです.あるいはメソッドであれば関数的メソッドも含め >て全て列挙するかどうかです. >全部列挙してしまうとあまり必要のないものまで含むことになりそ >うですし,かといってあまり狭めてしまうのも使いにくそうです. >どの程度が適切でしょうね. 定数に関してはそのクラス直下の定数全部でいいんじゃないですか? Foo::Bar::Bazのような定数は, 必要に応じて再帰的に調べればいいし. 関数に関しては... 何に使うかによるんでしょうが, 例えばメソッド名を全て 調べて, 名前が重複しないかどうか調べる時などは, 全てのメソッドが一覧で きないと駄目ですよね. >後, > > Module#constant_value(name) > Module#constant_value(name)=value >などもあると便利そうですが,いっそのこと > > Module#internal_binding > >のようなものを用意してevalに任せてしまうというのも手ですよね. うーん. これは却下. evalでbinding指定するのは結構嬉しくないことが多い (変数が使えない)ので... そうじゃなくて, イテレータならいいかも a = Foo::Bar::Baz a.internal do Bazz = Class.new("...") {...} end のようにね. この機能があると動的メソッド定義も大部落になるしいいなあ... a = Foo::Bar::Baz fun = "def foo() ..." a.internal do eval(fun) end どうでしょう? __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---