以下より慣用的なものはありますか?
foo.class == String
instance_of?
を探していると思います。 is_a?
およびkind_of?
は、派生クラスのインスタンスに対してtrueを返します。
class X < String
end
foo = X.new
foo.is_a? String # true
foo.kind_of? String # true
foo.instance_of? String # false
foo.instance_of? X # true
もっとカモタイピングのアプローチは言うことです
foo.respond_to?(:to_str)
to_str
は、オブジェクトのクラスが実際のStringの子孫ではないことを示しますが、オブジェクト自体は文字列に非常に似ています(文字列?)。
できるよ:
foo.instance_of?(String)
より一般的な:
foo.kind_of?(String)
foo.instance_of? String
または
foo.kind_of? String
String
の継承チェーンのどこかから派生したものかどうかだけを気にする場合
他の答えに加えて、Classはメソッド===を定義して、オブジェクトがそのクラスのインスタンスであるかどうかをテストします。