Pregunta

Si agrego una barra inclinada invertida + espacio al comienzo de las cadenas entre comillas dobles y simples, obtengo resultados diferentes:

"\ text"
'\ text' 

En el resultado de la cadena entre comillas dobles, solo veo un espacio.
En la salida de la cadena entre comillas simple veo barra invertida + espacio.

¿Qué está pasando allí? ¿Esto se debe a que '\ ' se interpreta como un carácter especial en la cadena de comillas dobles pero en la cadena de comillas simples los caracteres se conservan como están?

Si cambio las cadenas a esto, veo la misma salida, es decir, una barra inclinada seguida de un espacio y luego el texto:

"\\ text"
'\\ text' 

En ambos casos la barra invertida se escapa. Estoy confundido por qué funcionan de la misma manera en esta situación.

¿Existe alguna regla que ayude a explicar la diferencia fundamental entre cómo las cadenas con comillas simples y las cadenas con comillas dobles manejan las barras invertidas en Ruby?

¿Fue útil?

Solución

Lo recomendaría a " Ruby Programming / Strings " para una visión general muy concisa pero completa de las diferencias.

De la referencia:

  

puts "Betty's pie shop"

     

puts 'Betty\'s pie shop'

     

Porque " Betty's " contiene un apóstrofe, que es el mismo carácter que la comilla simple, en la segunda línea necesitamos usar una barra invertida para escapar del apóstrofe para que Ruby entienda que el apóstrofe está en el literal de la cadena en lugar de marcar el final del literal de la cadena. La barra invertida seguida de la comilla simple se llama secuencia de escape.

Otros consejos

Las cadenas entre comillas dobles admiten la gama completa de secuencias de escape, como se muestra a continuación:

  • \a Campana / alerta (0x07)
  • \b Retroceso (0x08)
  • \e Escape (0x1b)
  • \f Formford (0x0c)
  • \n Nueva línea (0x0a)
  • \r Retorno (0x0d)
  • \s Espacio (0x20)
  • \t Pestaña (0x09)
  • \v Pestaña vertical (0x0b)

Para cadenas de comillas simples, dos barras invertidas consecutivas se reemplazan por una barra invertida simple, y una barra invertida seguida de una comilla simple se convierte en una comilla simple:

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

Ruby solo interpreta secuencias de escape en cadenas con comillas dobles. En una sola cadena entre comillas, solo \\ (barra invertida) y \' (comilla invertida) se toman como caracteres especiales. Debe usar cadenas con comillas dobles solo cuando necesite más interpretación. De lo contrario, las comillas simples aumentan el rendimiento.

Cuando mencionaste incluir el nombre de una variable, Ruby nunca hace eso. Solo el nombre de la variable se trata como más del literal de cadena. Para incluir el valor de una variable (o cualquier expresión) ponga la expresión de esta manera:

"#{variable}"

Tenga en cuenta que esto solo funciona en cadenas con comillas dobles. Para agregar una variable a una sola entre comillas, debe hacer esto:

'The value of X is: '+X

Si necesita un formato serio, mire la versión de Ruby de sprintf e printf. Son más o menos envoltorios alrededor de las funciones de C, y son bastante potentes, pero un poco engorrosos de usar.

Esta no es una respuesta completa (ya que la simple pregunta ya ha sido respondida), sino que es información complementaria.

¿Qué estilo de cita de cadena Ruby prefiere?

  

No use comillas dobles si tiene que   escapar de ellos Y no caigas en & Quot; soltero   vs comillas dobles " trampa. Ruby tiene   excelente soporte para arbitrario   delimitadores para literales de cadena:

     

http://rors.org/2008/10/26 / dont-escape-in-strings

¡Seguí ese consejo y nunca he mirado atrás!

  

¿Es esto porque el '\' es   interpretado como un personaje especial en   la cadena de comillas dobles pero en el   cadena entre comillas simples los caracteres   se conservan como están?

Sí Las cadenas entre comillas simples se tratan como literales; las cadenas entre comillas dobles se interpolan. Esto es lo mismo en otros lenguajes similares a Ruby, y no ha cambiado en 1.9.

puedes hacer <%= f.label :nom_entreprise, "Nom de l'entreprise" %>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top