特異クラスの中に定義したクラスのancestors

class A
  class << self
    class B
    end
  end
end

p A.singleton_class.const_get(:B).ancestors
#=> [#<Class:0x00007fe8c203c980>::B, Object, Kernel, BasicObject]

特異クラスの #<Class:A> とは別に #<Class:0x00007fe8c203c980> が存在する・・・?

このオブジェクトの招待

Twitterのリプライで教えて頂いた。 どうやら表示が違うだけで Aの特異クラス でした。

試したコード

class A
  class << self
    class B
    end
  end
end

p A.singleton_class
#=> #<Class:A>
p A.singleton_class.const_get(:B).ancestors
#=> [#<Class:0x00007fd05b0ec6e8>::B, Object, Kernel, BasicObject]

require 'fiddle'
p Fiddle.dlwrap(A.singleton_class).to_s(16)
#=> "7fd05b0ec6e8"

また1つ、Ruby雑学力が増えた。 しかし、こんなコードは仕事で絶対に会いたくない。