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

Y a-t-il quelque chose de plus idiomatique que les suivants?

foo.class == Ssortingng 

Je pense que tu cherches instance_of? . is_a? et kind_of? retournera true pour les instances des 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 serait de dire

 foo.respond_to?(:to_str) 

to_str indique que la classe d’un object peut ne pas être un descendant réel de la chaîne, mais que l’object lui-même ressemble beaucoup à une chaîne (ssortingngy?).

Tu peux faire:

 foo.instance_of?(Ssortingng) 

Et le plus général:

 foo.kind_of?(Ssortingng) 
 foo.instance_of? Ssortingng 

ou

 foo.kind_of? Ssortingng 

si vous ne vous souciez que s’il est dérivé de Ssortingng quelque part dans sa chaîne d’inheritance

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

  • classe o.class de o.
  • o.instance_of? c détermine si o.class == c
  • o.is_a? c Est-ce une instance de c ou de 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 * ( Ssortingng === “s” renvoie true)

Je pense qu’un meilleur moyen est de créer des méthodes de prédicats. Cela sauvera également votre “Single Point of Control”.

 class Object def is_ssortingng? false end end class Ssortingng def is_ssortingng? true end end print "test".is_ssortingng? #=> true print 1.is_ssortingng? #=> false 

Le plus typé du canard;)