ひわだです。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-list:12033] Re: how to make class?
Date: Fri, 12 Feb 1999 10:54:51 +0900

> まつもと ゆきひろです

> |$aa=eval(gets())
> |$bb=($aa.methods)-(($aa.superclass).methods)
> |$bb.sort.each { |ii|
> | print i, "\n"
> |}
> |
> |getsでクラス名を(俺が)打ち込むことを仮定してます。ってのは、
> |classライブラリの説明書よろしく「ご希望のclassで、新設された
> |method一覧」を出そうと思ったんですが、こんなんで
> |いいんでしょうか…なにせ初めてなもんで…
> 
> これだと新規に追加されたクラスメソッドを表示しちゃうんですね.
> たぶん,こんなのがよろしいのでは
> 
> aa=eval(gets())
> (aa.instance_methods-aa.superclass.instance_methods).sort.each do |i|
>  print i, "\n"
> end

aa.instance_methods-aa.superclass.instance_methods(true)
の方がいいかも(…細かいですが)。

この辺はちょっとややこしいのですが ^^;;;、ruby-1.2 では、

  aClass.instance_methods 
    ==> aClass で新たに定義されたインスタンスメソッド(再定義されたものも)

  aClass.instance_methods(true)
    ==> aClass で定義されているインスタンスメソッド(継承したのも含む)

となっているんだと思います。類似品に public_instance_methods(同じ?),
protected_instance_methods, private_instance_methods などがあり、それ
ぞれ上記のような引数をとります。クラスメソッドは、

  aObject.methods
    ==> aObject の持つメソッド(method_missing によりこれ以外のメソッ
       ドを受付けることもあるけど…)

で見れます。クラスメソッドが再定義されたかを調べる方法は知りません __;。

#折角だからまとめとこうと思ったんですが、あんまり役に立たないか…