36.Ruby|instance_of?/is_a?(kind_of?)
instance_of?(klass) -> bool
オブジェクトがクラス klass の直接のインスタンスである時、真を返します。
obj.instance_of?(c) が成立する時には、常に obj.kind_of?(c) も成立します。
[PARAM] klass:
Classかそのサブクラスのインスタンスです。
class C < Object end => nil class S < C end => nil obj = S.new => #<S:0x00007fdee60d2628> p obj.instance_of?(S) => true p obj.instance_of?(C) => false
is_a?(mod) -> bool
kind_of?(mod) -> bool
※kind_of?
はis_a?
のエイリアス(なので同じ処理)。
オブジェクトが指定されたクラス mod かそのサブクラスのインスタンスであるとき真を返します。
また、オブジェクトがモジュール mod をインクルードしたクラスかそのサブクラスのインスタンスである場合にも真を返します。 Module#includeだけではなく、Object#extendやModule#prependによってサブクラスのインスタンスになる場合も含みます。上記のいずれでもない場合に false を返します。
[PARAM] mod:
クラスやモジュールなど、Moduleかそのサブクラスのインスタンスです。
module M end => nil class C < Object include M end => C class S < C end => nil obj = S.new => #<S:0x00007f94c892e370> p obj.is_a?(S) => true p obj.is_a?(C) => true p obj.is_a?(Object) => true p obj.is_a?(M) => true p obj.is_a?(Hash) => false
↑ ※Moduleをクラスの中にインクルードしている。 インクルードされたModuleはインスタンスメソッドと同じ様に実行できる。
参考
Module
Moduleの使い方
定数やメソッドをまとめる
クラスに組み込んで多重継承を実現する
名前空間を提供する