Ruby では、すべてのモジュールのリストを取得するのは簡単です。
ObjectSpace.each_object(Module).to_a
しかし、すべての固有クラス (シングルトン クラスまたはメタクラスとも呼ばれます) のリストを取得することは可能ですか? それとも、固有クラスは見えませんか?
私は試した
str = "foo"
my_metaclass = class << str; self; end
my_metaclass.class == Class # my_metaclass' class is Class
ObjectSpace.each_object(Class).include?(my_metaclass) # false
ObjectSpace.each_object.include?(my_metaclass) # still false
# Just to show each_object works
ObjectSpace.each_object(Class).include?(String) # true
スクリプト内で定義されているすべてのメソッドをリストしたいので、固有クラスを取得しようとしています。モジュールとクラスによって定義されたすべてのインスタンス メソッドを探してから、モジュールとクラス (または、CPU をかみ砕く必要がある場合はすべてのオブジェクト) のシングルトン メソッドを探すことができますが、それは少しハックに思えます。