metodos - La forma más concisa para probar la igualdad de cadenas(no la igualdad de objetos) para cadenas de Ruby o símbolos?
metodos de la clase string (2)
Siempre hago esto para probar la igualdad de cadenas en Ruby:
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
¿Es esta la forma correcta de hacerlo sin probar la igualdad de objetos?
Estoy buscando la forma más concisa para probar cadenas basadas en su contenido.
Con los paréntesis y el signo de interrogación, esto parece un poco torpe.
De acuerdo con http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison
Haciendo cualquiera de los dos
mystring == yourstring
o
mystring.eql? yourstring
Son equivalentes
La muestra de su código no se expandió en parte de su tema, es decir, símbolos, por lo que esa parte de la pregunta no recibió respuesta.
Si tiene dos cadenas, foo y barra, y ambas 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 omitir las conversiones de cadenas en operandos de tipo conocido. Entonces, si foo es siempre una cadena
foo == bar.to_s
Pero la ganancia de eficiencia casi no merece 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 para fines de comparación (con cadenas o símbolos), ya que los símbolos no son basura recolectada, por lo que puede abrirse a la 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.