rubyのException

gold対策。
 
rubyのクラスを階層構造で表示 - rochefort's blog

簡単に解説すると、Treeってクラスに
Module.constantsで取得したクラス毎に
そのクラスと親のクラスを保有するTreeNodeDataクラスのインスタンスとして突っ込んで行って
to_sで階層化して出力するスクリプトです。
(あんまりきれいではない)
 
このスクリプトの実行部分を下記のようにすると
Exception以下のクラス一覧が取り出せます。

  tree = Tree.new
  Module.constants.each do |elm|
    const = eval(elm.to_s)
    if const.respond_to?(:superclass) && const.ancestors.include?(Exception)
      if const == Exception
        tree << [const, nil]
      else
        tree << [const, const.superclass]
      end
    end
  end

  puts tree

結果

Exception
  NoMemoryError
  ScriptError
    LoadError
    NotImplementedError
    SyntaxError
  SecurityError
  SignalException
    Interrupt
  StandardError
    ArgumentError
    EncodingError
    FiberError
    IOError
      EOFError
    IndexError
      KeyError
      StopIteration
    LocalJumpError
    NameError
      NoMethodError
    RangeError
      FloatDomainError
    RegexpError
    RuntimeError
    StringScanner::Error
    SystemCallError
    ThreadError
    TypeError
    ZeroDivisionError
  SystemExit
  SystemStackError

たくさんあるのですが、重要なところ(出題されそうなところ)としては
下記ぐらいのようです。

Exception
  ScriptError
    SyntaxError
  SignalException
  StandardError
    ArgumentError
    NameError
      NoMethodError
    RuntimeError
    ZeroDivisionError
  SystemExit

個人的に理解していなかったのは、
NoMethodErrorがNameErrorのサブクラスというところ。