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 .