web-dev-qa-db-fra.com

Vérifier si une variable est une chaîne dans Ruby

Y a-t-il quelque chose de plus idiomatique que le suivant?

foo.class == String
109
davidchambers

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
175
Candide

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?).

24
Andrew Grimm

Tu peux faire:

foo.instance_of?(String)

Et le plus général:

foo.kind_of?(String)
21
Federico Builes
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

6
Matthew

En plus des autres réponses, Class définit la méthode === pour tester si un objet est une instance de cette classe.

  • o.class classe de o.
  • o.instance_of? c détermine si o.class == c
  • o.is_a? c Est-ce que o est une instance de c ou l'une de ses sous-classes?
  • o.kind_of? c synonyme de * is_a? *
  • c === o pour une classe ou un module, déterminez si * o.is_a? c * ( String === "s" renvoie true)
3
steenslag