79 votes

Le moyen le plus concis de tester l'égalité des chaînes (et non des objets) pour les chaînes ou les symboles Ruby ?

Je fais toujours cela pour tester l'égalité des chaînes de caractères en Ruby :

if mystring.eql?(yourstring)
 puts "same"
else
 puts "different"
end

Est-ce la bonne façon de procéder sans tester l'égalité des objets ?

Je cherche le moyen le plus concis de tester des chaînes de caractères en fonction de leur contenu.

Avec les parenthèses et le point d'interrogation, cela semble un peu lourd.

137voto

JasonWyatt Points 2806

Selon http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison

Faire soit

mystring == yourstring

ou

mystring.eql? yourstring

sont équivalentes.

13voto

sheldonh Points 1173

Votre exemple de code n'a pas développé une partie de votre sujet, à savoir les symboles, et cette partie de la question est donc restée sans réponse.

Si vous avez deux chaînes, foo et bar, et que les deux peuvent être soit une chaîne soit un symbole, vous pouvez tester l'égalité avec

foo.to_s == bar.to_s

Il est un peu plus efficace de sauter les conversions de chaînes de caractères sur les opérandes de type connu. Donc si foo est toujours une chaîne

foo == bar.to_s

Mais le gain d'efficacité ne vaut certainement pas la peine d'exiger un travail supplémentaire de la part de l'appelant.

Avant la version 2.2 de Ruby, évitez d'intercaler des chaînes d'entrée non contrôlées à des fins de comparaison (avec des chaînes ou des symboles), car les symboles ne sont pas ramassés à la poubelle et vous pouvez donc vous exposer à un déni de service par épuisement des ressources. Limitez l'utilisation des symboles aux valeurs que vous contrôlez, c'est-à-dire les littéraux dans votre code et les propriétés de configuration fiables.

Ruby 2.2 introduction du ramassage des symboles .

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