Vérifier si une variable est une chaîne de caractères en Ruby
Est-il rien de plus idiomatique que le suivant?
foo.class == String
Vous devez vous connecter pour publier un commentaire.
Est-il rien de plus idiomatique que le suivant?
foo.class == String
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes à la recherche pour
instance_of?
.is_a?
etkind_of?
renvoie true pour les instances de classes dérivées.is_a?
est en fait la plus appropriée idiome à utiliser (et souvent un duck-typing case comme Andrew Grimm mentionne, c'est encore mieux). Une stricte comparaison est habituellement une odeur de code. en.wikipedia.org/wiki/Liskov_substitution_principleString
, mais aussi avecInteger
etFloat
. Est-il aussi travailler pourDecimal
? (le sublime text interprète met en évidence la syntaxe différemment pourDecimal
ce qui me fait douter)Plus duck-typing approche serait de dire
to_str
indique qu'une classe de l'objet ne peut pas être un véritable descendant de la Chaîne, mais l'objet lui-même est très bien de type corde (filandreux?).foo
seratrue
,false
, ou à la vanille, de la chaîne, mais il est bon d'en apprendre davantage solutions générales.to_str
, outo_s
? Les deux sont légèrement différentes.Que vous pouvez faire:
Et le plus général:
kind_of
plus général? Ils semblent être synonyme:is_a
.instance_of?
au lieu deis_a?
.ou
si vous vous en charge uniquement si elle est derrived de
String
quelque part son héritage de la chaîne d'En plus des autres réponses, Classe définit la méthode d' === pour tester si un objet est une instance de cette classe.
Je pense que la meilleure voie est de créer un certain prédicat méthodes.
Cela permettra également de sauvegarder votre "Point de Contrôle Unique".
Le plus duck-typing façon 😉
"string".is_a?(String)
. Il semble que vous êtes en train de réinventer la roue. Il y a aussiclass
,instance_of
,kind_of
, etc... Mauvaise idée de le singe patch leObject
classe, pour ne pas mentionner que c'est inutile.pre_check("test".is_string?)
Maintenant votre projet exigence de changement et chaque Chaîne de trois caractères ou plus n'est plus défini comme une Chaîne de caractères (je sais que c'est inhabituel ;)) Maintenant, vous pouvez changer votre propre méthode facilement.