CatCoding

Browser objs and class hierarchy in Ruby

2012-12-26

Ruby 里一切都是对象,如何能看到 Ruby 内建的对象模型呢。这里有个小程序来查看 Ruby 内部构建好的的对象和类。ObjectSpace 可以迭代所有对象。

 set = Set.new()
 ObjectSpace.each_object do |x|
   set.add(x.class)
 end

set.each do |x|
  puts x
end

下面这段就能根据对象,取得 class 对象,建立起类的继承图。


# Creates or updates a klass_tree.
# When updating no classes or objects are removed
def object_browser(classtree = ClassTreeNode.new(Kernel))
  ObjectSpace.each_object do | x |
    classnode = classtree
    x.class.ancestors.reverse[1..-1] \
      .inject(classtree){ | classnode, klass |
      classnode.add_class(klass)
    }.add_object(x)
  end
  classtree
end

use this command to get image:

$ruby prog.rb > class.dot; dot -Tpng class.dot -o class.png

结果看起来像这样,所有对象都画出来比较多,看大图还稍微能看到一些。完整的代码在这里
class in Rubyclass in Ruby
class in Rubyclass in Ruby

公号同步更新,欢迎关注👻