このマニュアルは既にメンテナンスが終了したバージョンの Ruby を対象としています。 最新版のマニュアルへ

Ruby 3.2 リファレンスマニュアル

module function ObjectSpace.#internal_class_of

internal_class_of(obj) -> Class | ModuleRuby 2.3.0 から[permalink][rdoc][edit] [added by objspace]

obj の実際のクラスを返します。これは Object#class が返すクラスとは異なる場合があります。

Ruby は特異クラスや、include したモジュールの iclass のような隠されたクラスをオブジェクトの継承関係に挿入します。Object#class はこれらを読み飛ばして返しますが、本メソッドは特異クラスなどの隠されたクラスも含めて、最初に見つかったクラスをそのまま返します。

[PARAM] obj:
実際のクラスを取得したいオブジェクトを指定します。ObjectSpace::InternalObjectWrapper オブジェクトを指定することもでき、その場合はラップされている内部オブジェクトのクラスを返します。
require 'objspace'

s = "x"
def s.foo; end                      # s に特異クラスを与える
p s.class                           # => String
p ObjectSpace.internal_class_of(s)  # => #<Class:#<String:0x...>>

本メソッドをアプリケーションで使用すべきではありません。

本メソッドは CRuby 以外では動作しません。

[SEE_ALSO] ObjectSpace.#internal_super_of