2012-04-10 36 views
6

Ho una stringa str = "xyz\123" e voglio stamparla così com'è.Come stampare una stringa con una barra rovesciata in Ruby

L'IRB mi sta dando un'uscita inaspettata. Si prega di trovare la stessa di seguito: -

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

Tutte le idee su come posso ottenere IRB per stampare la stringa originale vale a dire "xyz \ 123".

grazie ..

UPDATE:

Ho provato a scappare, ma non sembra essere così semplice per qualche motivo. Di seguito riportiamo le mie prove con lo stesso:

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

"Basta scappare." Oppure, "leggi un tutorial". Fai una scelta Potresti volere anche '.inspect'. –

+1

Mi chiedo perché questa domanda non sia stata votata .. – boddhisattva

risposta

5

risposta AGGIORNAMENTO:

fuga token '\' è sempre al lavoro nel codice ruby ​​semplice, ma non sempre lavorare in "console ruby". quindi vi consiglio di scrivere uno unit test:

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

e otterrete come risultato:

hi\backslash 

e vedere commenti @ di PST.

+1

Ho provato questo, non funziona. Stampa il backslash due volte. Output: "xyz \\ 123" – boddhisattva

+0

@boddhisattva Questo è corretto. Vedi il mio commento sotto la risposta di Hophat. –

+0

@boddhisattva, ho aggiornato la mia risposta. –

3

Il carattere backslash è un carattere di escape. Potresti aver visto "\ n" essere usato per visualizzare una nuova riga, ed è per questo. "\ 123" elabora il codice ASCII per 83, che è "S". Per stampare una barra rovesciata usare 2 barre rovesciate. Quindi potresti usare str = "xyz\\123".

+1

Ho provato questo, non funziona. Stampa il backslash due volte. Output: "xyz \\ 123" – boddhisattva

+1

@boddhisattva Che è * corretto * perché REPL stampa il modulo '.inspect' che, per le stringhe è la forma a virgolette che può essere" eval "edita a un equivalente dell'originale oggetto. Prova: 'mette str' e confronta. –

+0

@pst Grazie .. funziona ora .. quindi è proprio quello in Rails Console e IRB .. non verrebbe stampato come fa con "puts str"? – boddhisattva

0

Come stampare un backslash?

Utilizzare 2 backslash, ad es. "xyz\\123"

Perché il valore "xyz\123" corrisponde a "xyzS"?

In una stringa con doppia citazione, \nnn è una fuga ottale.

Table 22.2. Substitutions in Double-Quoted Strings

Thomas, D. (2009) di programmazione Ruby, p.329

Quindi, ottale 123
= (64 * 1) + (8 * 2) + 3
= decimale 83
= ASCII S

+0

in che modo si riferisce alla stampa di una barra rovesciata? –

0

E 'semplice ... provare funzione di discarica:

mystring = %Q{"Double Quotes"} 
p mystring.dump 
=> "\"\\\"Double Quotes\\\"\"" 
p mystring 
=>"\"Double Quotes\"" 
Problemi correlati