Y a-t-il quelque chose de plus idiomatique que le suivant?
foo.class == String
Je pense que vous cherchez instance_of?
. is_a?
et kind_of?
retournera true pour les instances de classes dérivées.
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
Une approche plus typée du canard serait de dire
foo.respond_to?(:to_str)
to_str
indique que la classe d'un objet n'est peut-être pas un descendant réel de String, mais que l'objet lui-même ressemble beaucoup à string (stringy?).
Tu peux faire:
foo.instance_of?(String)
Et le plus général:
foo.kind_of?(String)
foo.instance_of? String
ou
foo.kind_of? String
si vous ne vous souciez que s'il est dérivé de String
quelque part dans sa chaîne d'héritage
En plus des autres réponses, Class définit la méthode === pour tester si un objet est une instance de cette classe.