Skip to content

Instantly share code, notes, and snippets.

@deris
Last active December 16, 2015 19:39
Show Gist options
  • Save deris/5486533 to your computer and use it in GitHub Desktop.
Save deris/5486533 to your computer and use it in GitHub Desktop.
クラス階層を表示するクラスメソッド
# add print class tree method to Object
class Object
def self.print_class_tree
@class_tree ||= {}
# create class tree if not yet
ObjectSpace.each_object(Class) do |cls|
next if self == cls
# skip is cls is no name
next if cls.name.nil?
# skip is cls is not self's ancestor
next unless cls.ancestors.include? self
@class_tree[cls.superclass.name] ||= []
@class_tree[cls.superclass.name] << cls.name
end if @class_tree == {}
self._print_class_tree(self.to_s)
end
private
def self._print_class_tree(arg, level=0)
puts (' ' * level) + arg
return if @class_tree[arg].nil?
@class_tree[arg].sort.each do |x|
self._print_class_tree(x, level+1)
end
end
end
__END__
# example
Numeric.print_class_tree
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment