再考:classとそれが読み込んでいるmoduleの一覧を表示する方法
※この記事の最後のプログラムはバグがあります。正しい物は下記の物を参照して下さい。
再々考:classとそれが読み込んでいるmoduleの一覧を表示する方法(bugfix) - 猫の魔法
今日、Module#ancestorsという インスタンスメソッドを目にしたのだが、このメソッドを使えば、このブログの一番最初に書いたプログラムがもっと簡単に組める事に気がついた。
def display_class_modules(class_name) class_name.ancestors.each do |klass| puts "class:#{klass},modules:#{klass.included_modules}" if klass.is_a?(Class) end end
古いやつと比較してみるとバッチリ結果が一緒になった。
def display_class_modules_old(class_name) print "class:#{class_name},modules:#{class_name.included_modules}","\n" if class_name.respond_to?(:included_modules) display_class_modules(class_name.superclass) if class_name.respond_to?(:superclass) end def display_class_modules(class_name) class_name.ancestors.each do |klass| puts "class:#{klass},modules:#{klass.included_modules}" if klass.is_a?(Class) end end puts 'same' if display_class_modules(1.class) == display_class_modules(1.class) #=> class:Integer,modules:[Comparable, Kernel] #=> class:Numeric,modules:[Comparable, Kernel] #=> class:Object,modules:[Kernel] #=> class:BasicObject,modules:[] #=> class:Integer,modules:[Comparable, Kernel] #=> class:Numeric,modules:[Comparable, Kernel] #=> class:Object,modules:[Kernel] #=> class:BasicObject,modules:[] #=> same
少しずつrubyにも慣れて来たかな。もっとプログラムを書く時間が欲しい。