IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Browser objs and class hierarchy in Ruby

    Yukang (moorekang@gmail.com)发表于 2012-12-26 00:00:00
    love 0

    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



沪ICP备19023445号-2号
友情链接