rubyのクラスを階層構造で表示

例外クラスの一覧が知りたくて書いてみた。
どこかに一覧ぐらいあって当然くらいに思ってたんですが、見当たらないんですよね。

ソース

結果

Object
  Array
  Binding
  Continuation
  Data
  Dir
  Exception
    NoMemoryError
    ScriptError
      LoadError
      NotImplementedError
      SyntaxError
    SignalException
      Interrupt
    StandardError
      ArgumentError
      IOError
        EOFError
      IndexError
        StopIteration
      LocalJumpError
      NameError
        NoMethodError
      RangeError
        FloatDomainError
      RegexpError
      RuntimeError
      SecurityError
      SystemCallError
      SystemStackError
      ThreadError
      TypeError
      ZeroDivisionError
    SystemExit
  FalseClass
  Hash
  IO
    File
  MatchData
  MatchData
  Method
  Module
    Class
  NilClass
  Numeric
    Float
    Integer
      Bignum
      Fixnum
  Proc
  Range
  Regexp
  String
  Struct
  Symbol
  Thread
  ThreadGroup
  Time
  Tree
  TrueClass
  UnboundMethod

補足

ざっくり仕様

[constant, constant.superclass]の形で配列に放り込んで
matchingさせながら出力しています。
多分、もっといいアルゴリズムがあると思うので後々修正するかも。eval使ってるのも嫌だ。

MatchDataが重複してる

MatchingDataってのが古いMatchDataのようです。
constantの結果をevalしてるので、重複して見えます。
evalするのをやめればいいんだけど、飽きたので放置です。
?> MatchData
=> MatchData
>> MatchingData
=> MatchData

一応1.8/1.9で動きます

面白いことにModule.constansの結果が1.8/1.9で違います。1.8は文字列、1.9はsymbolが返ります。