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 Ruby class in Ruby

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