2012-04-10 9 views
6

Tengo una cadena str = "xyz\123" y quiero imprimirla como está.Cómo imprimir una cadena con una barra hacia atrás en Ruby

El IRB me está dando un resultado inesperado. Por favor, encontrar el mismo a continuación: -

1.9.2p290 :003 > str = "xyz\123" 
=> "xyzS" 
1.9.2p290 :004 > 

Alguna idea sobre cómo puedo obtener IRB para imprimir la cadena original es decir, "xyz \ 123".

Gracias ..

ACTUALIZACIÓN:

He intentado escapar de ella, pero no parece ser tan sencillo, por alguna razón. A continuación mis pruebas con el mismo:

1.9.2p290 :004 > str = "xyz'\'123" 
=> "xyz''123" 
1.9.2p290 :005 > str = "xyz'\\'123" 
=> "xyz'\\'123" 
1.9.2p290 :006 > str = "xyz'\\\'123" 
=> "xyz'\\'123" 
1.9.2p290 :007 > 
+1

"Solo escapéalo". O, "lea un tutorial". Toma una elección. Es posible que desee '.inspect' también. –

+1

Me pregunto por qué esta pregunta fue votada. – boddhisattva

Respuesta

5

respuesta ACTUALIZADO:

de escape símbolo '\' siempre está trabajando en el código ruby ​​simple, pero no siempre trabajan en "consola de rubí". así que sugiero que escriba una prueba de unidad:

# escape_token_test.rb 
require 'test/unit' 
class EscapeTokenTest < Test::Unit::TestCase 
    def test_how_to_escape 
    hi = "hi\\backslash" 
    puts hi 
    end 
end 

y obtendrá como resultado que:

hi\backslash 

y ver comentario de @ pst.

+1

Intenté esto, no funciona. Imprime la barra invertida dos veces. Salida: "xyz \\ 123" – boddhisattva

+0

@boddhisattva Eso es correcto. Vea mi comentario bajo la respuesta de Hophat. –

+0

@boddhisattva, actualicé mi respuesta. –

3

La barra diagonal inversa es un carácter de escape. Es posible que haya visto "\ n" usarse para mostrar una nueva línea, y esa es la razón. "\ 123" evala el código ASCII para 83, que es "S". Para imprimir una barra invertida use 2 barras diagonales inversas. Entonces podrías usar str = "xyz\\123".

+1

Intenté esto, no funciona. Imprime la barra invertida dos veces. Salida: "xyz \\ 123" – boddhisattva

+1

@boddhisattva Que es * correcto * porque el REPL imprime el formulario '.inspect' que, para cadenas, es el formulario de doble cita que puede ser" evaluado "de nuevo a un equivalente del original objeto. Pruebe: 'puts str' y compare. –

+0

@pst Gracias ... funciona ahora ... así que es solo eso en Rails Console y IRB ... ¿no imprimiría como lo hace con "puts str"? – boddhisattva

0

Cómo imprimir una barra diagonal inversa?

Utilice 2 barras diagonales inversas, p. Ej. "xyz\\123"

¿Por qué "xyz\123" evaluar a "xyzS"?

En una secuencia de comillas dobles, \nnn es escape octal.

Table 22.2. Substitutions in Double-Quoted Strings

Thomas, D. (2009) Programación Ruby, p.329

Así, octal 123
= (64 * 1) + (8 * 2) + 3
= decimal 83
= ASCII S

+0

¿cómo se relaciona esto con la impresión de una barra invertida? –

0

es muy sencillo ... probar la función de volcado:

mystring = %Q{"Double Quotes"} 
p mystring.dump 
=> "\"\\\"Double Quotes\\\"\"" 
p mystring 
=>"\"Double Quotes\"" 
Cuestiones relacionadas