164 votes

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

Y a-t-il quelque chose de plus idiomatique que ce qui suit?

 foo.class == String
 

257voto

Candide Points 12137

Je pense que vous recherchez instance_of? . is_a? et kind_of? renverront 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
 

35voto

Federico Builes Points 1940

Tu peux faire:

 foo.is_a?(String)
 

Et le plus général:

 foo.kind_of?(String)
 

33voto

Andrew Grimm Points 22996

Une approche plus typée 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 la chaîne, mais que l'objet lui-même ressemble beaucoup à une chaîne (string?).

8voto

Matthew Points 4695
 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

5voto

steenslag Points 29662

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X