動的クラス生成

動的というか、構文要らずというか。
例外処理は構文使ってるけど。

classid = 1234567
eval("MyEx#{classid} = Class.new(Exception)").class_eval{
  define_method(:initialize){|obj|
    @obj = obj
  }
  define_method(:obj){
    @obj
  }
}

hash = {:a=>"A", :b=>"B"}

begin
  raise eval("MyEx#{classid}").new(hash)
rescue eval("MyEx#{classid}") => ex
  puts 'rescue!'           # => rescue!
end

p ex                       # => #<MyEx1234567: MyEx1234567>
p ex.obj                   # => {:b=>"B", :a=>"A"}
p ex.obj.equal?(hash)      # => true
p ex.class                 # => MyEx1234567

こんなことができるのかぁ。