Last active
December 16, 2015 19:39
-
-
Save deris/5486533 to your computer and use it in GitHub Desktop.
クラス階層を表示するクラスメソッド
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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