From: Koichi Sasada Date: 2017-12-05T10:36:45+09:00 Subject: [ruby-list:50615] Re: [質問] メタプログラミングRuby(第1版)の include時の無名クラス という記載について On 2017/12/05 0:28, Shugo Maeda wrote: > 2017年12月3日 22:21 モコあき : >> Rubyの内部事情(?)をメタプログラミングRuby(第1版)がそのように表現しただけで、実際にアクセス出来るような代物ではない >> => その無名クラスへのアクセスは諦めてください > > 実装の都合で用意されている内部的なオブジェクトなので普通の方法ではアクセスできません。 普通じゃ無い方法その2です。 `ObjectSpace.internal_class_of` を使うと、見るだけは見ることができます。 ``` require 'objspace' module M0 end module M1_0 end module M1 include M1_0 end class C include M0 include M1 end class Module def internal_ancestors m = self ary = [] while m if m.kind_of? ObjectSpace::InternalObjectWrapper ary << [m, ObjectSpace.internal_class_of(m)] else ary << m end m = ObjectSpace.internal_super_of(m) end ary end end p C.ancestors p C.internal_ancestors ``` -- // SASADA Koichi at atdot dot net