From: "たけ (tk)" Date: 2000-10-28T21:11:04+09:00 Subject: [ruby-list:25666] Re: 拡張ライブラリで定義されているモジュール名は? たけ(tk)です。 kadu さん曰く。 》> 》拡張モジュールで定義されているモジュール名、クラス名を知るにはどうすれば 》> 》いいのでしょうか?。 》拡張ライブラリの読み込み前と、読み込み後の、 》クラス、モジュールの差分をとればできると思います。  あ、そうなんですか。そうすると、[ruby-list:25652]は別に裏技ではないわ けですね。 》>  それと、「現在使用可能なモジュール・クラスのリスト」というのはないので 》> しょうか?。 》クラスは 》ObjectSpace.each_object(Class) do |c| 》 p c 》end  ありがとうございました。いっぱい出てきました。methods や constants に 合わせて、文字列にして返す、第一レベルだけを返すようにしてみました。  こういうのって組み込みで欲しくありませんか?。methods や constants が あるのだから classes や modules があってもおかしくない。正確なモジュール 名をど忘れしたようなときには便利そう。特に拡張ライブラリの場合にはソース がないことが多いので、名前を思い出さないと致命的。それに、組み込みであれ ば、なんとなく自慢できそうな機能だと思う。 def classes( recursive = false ) result = [] ObjectSpace.each_object(Class) do |c| s = c.to_s result << s if recursive or (not s =~ /\:/) end result end def modules( recursive = false ) result = [] ObjectSpace.each_object(Module) do |m| next if not (m.instance_of?(Module)) # omit Class s = m.to_s result << s if recursive or (not s =~ /\:/) end result end p "modules" p modules.sort p "classes" p classes.sort p "methods" p methods.sort たけ(tk) ggb03124@nifty.ne.jp http://member.nifty.ne.jp/take_tk