[ruby-list:50616] Re: [質問] メタプログラミングRuby(第1版)の include時の無名クラス という記載について

From: モコあき <mokoriso@...>
Date: 2017-12-06 02:16:15 UTC
List: ruby-list #50616
モコあきと申します

お二方とも、丁寧に教えていただきありがとうございます
私が「件の無名クラス」として探していた彼は、表側からの通常利用では触る必要もないのでそのようになっているのでしょうね

わざわざ手を動かしていただき、本当にありがとうございました 精進します



2017年12月5日 10:36 Koichi Sasada <ko1@atdot.net>:
>
>
> On 2017/12/05 0:28, Shugo Maeda wrote:
>>
>> 2017年12月3日 22:21 モコあき <mokoriso@gmail.com>:
>>>
>>> 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

In This Thread

Prev Next