Su ejemplo de código no se amplió en una parte de su tema, a saber, los símbolos y de manera que parte de la pregunta quedó sin respuesta.
Si tiene dos cadenas, foo y bar, y ambos pueden ser una cadena o un símbolo, puede probar la igualdad con
foo.to_s == bar.to_s
Es un poco más eficiente para saltarse las conversiones de series de operandos con tipo conocido Así que si foo es siempre una cadena
foo == bar.to_s
Sin embargo, el aumento de la eficiencia no es casi seguro que vale la pena exigir ningún trabajo adicional en nombre de la persona que llama.
Antes de Ruby 2.2, evite internar cadenas de entrada no controladas con fines de comparación (con cadenas o símbolos), ya que los símbolos no son basura, y puede abrirse a denegación de servicio por agotamiento de recursos. Limite el uso de símbolos a los valores que controla, es decir, literales en su código y propiedades de configuración confiables.
Rubí 2,2 introduced garbage collection of symbols.
esto es correcto. El comparador de identidad es 'igual?'. – Chuck