From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-09-02T13:17:11+09:00 Subject: [ruby-dev:370] Re: methods [Re: ruby 1.1a5 released] けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :00363 ] the message: "[ruby-dev:363] Re: methods [Re: ruby 1.1a5 released] ", on Sep/02 12:03(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >まつもと ゆきひろです >議論の口火として,今までをまとめると > > * どのようなメソッド定義されているかを知りたい > >という要求があったので,Module#instance_methodsと >Object#methodsを用意しようという話になりました. そうですね. >さて,メソッド名を知りたい時には「どのクラスで」定義されてい >るかどうかも知りたいというニーズは理解できます.そこで,現状 >では > > Module#instance_methodsではそのクラスで定義されているメソッ > ド(引数を指定するとそのクラスのインスタンスが解釈するすべ > てのメソッド)の名称リストを返します. > > Object#methodsではそのオブジェクトの特異メソッドと,そのオ > ブジェクトのクラス(Object#type)で定義されているメソッド名 > を返します. > >という仕様になっています.どうも,これでは足りないようなので >すが,どう足りないのか,ということについて議論したいです.あ >るオブジェクトの特異メソッドを返すメソッド(あるいはオプショ >ン)があればそれで済む問題なんですか? 少なくともそれは欲しいですね. あと, * オブジェクトのプライベートな特異メソッドを返す関数 も欲しいですね. あと, もしやって頂けるなら, * その(クラスのインスタンス|オブジェクト)が分かるメソッドとそれが実際 にどのクラスで定義されているかの組みを返してくれるメソッド があるとベストですが, methods関連メソッド群とancestorsがあれば作ること ができますので, 無理はいいません. あと, 良く考えたら定数の問題がありました. そのクラスから参照できる定数 やそこで定義されている定数は分かるのですが, その定数がどこで定義されて いるかが分からないんですよね. * ancestorsに相当する, 定数の参照パスを返すメソッド * か, 静的スコープのパス(これは分かるのかな? 文字列ベースだけど) が必要ですね. 後者は優先順位の判断はこちらで行うことになるので若干面倒 ですが, ancestorsの機能と重複していないのでその方が良いかも... ここまでの機能があれば, あるクラスを指定して, そこで利用できるメソッド /クラスメソッド/定数がどこで定義されているか分かるようになると思います. つぎに, 将来的なことも考えて, クラスのブラウジングツールを作るという視 点から見ると, * あるクラスから直接includeしているモジュールを調べるメソッド(優先度順) * あるクラスのサブクラス群を取り出すメソッド は欲しいですね. 後者はスーパクラスが分かるのでそういう情報を作ることは できなくもないですが, 前者は今のところ無理ですよね. これらがあれば, MLFレベルで完全なクラスツリーの再現と, どこにメソッド, クラス(特異)メソッド, 定数があるかを再現できるようになりますね. あと, さらに要望を述べるなら, メソッド内部の情報になっていくと思います. * 定義されているクラス * メソッド名 * 引数の数 * 使用しているインスタンス変数の一覧 * 使用している定数の一覧 * ローカル変数(およびプライベート呼びだしメソッド)の一覧 * 呼び出しているメソッド名の一覧 でも, ここまでは大変でしょ? # 何だかんだいって要望が増えたなあ... __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---