2012-04-10 16 views
6

Mam ciąg str = "xyz\123" i chcę go wydrukować tak jak jest.Jak wydrukować ciąg znaków z odwrotnym ukośnikiem w Ruby

IRB daje mi nieoczekiwane wyniki. Należy znaleźć takie same poniżej: -

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

Wszelkie pomysły, w jaki sposób mogę uzyskać IRB wydrukować oryginalny łańcuch czyli „xyz \ 123”.

Dziękuję ..

UPDATE:

Próbowałem uciec, ale to nie wydaje się być takie proste z jakiegoś powodu. Proszę znaleźć poniżej moich próbach z tego samego:

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

"Po prostu uciec." Lub "przeczytaj samouczek". Wybierz. Możesz również użyć '.inspect'. –

+1

Zastanawiam się, dlaczego to pytanie zostało odrzucone. – boddhisattva

Odpowiedz

5

UPDATED odpowiedź:

ucieczki znak „\” zawsze pracuje w zwykłym kodzie Ruby, ale nie zawsze działa w konsoli „ruby”. więc proponuję napisać test jednostkowy:

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

a dostaniesz wynik:

hi\backslash 

i patrz komentarz @ PST za.

+1

Próbowałem tego, to nie działa. Drukuje odwrotny ukośnik dwa razy. Wyjście: "xyz \\ 123" – boddhisattva

+0

@boddhisattva To prawda. Zobacz mój komentarz pod odpowiedzią Hophata. –

+0

@boddhisattva, zaktualizowałem swoją odpowiedź. –

3

Znak ukośnika odwrotnego to znak ucieczki. Być może zobaczyłeś "\ n", aby wyświetlić nową linię, i właśnie dlatego. "\ 123" evaulates kodu ASCII dla 83, który jest "S". Aby wydrukować ukośnik odwrotny, użyj 2 ukośników odwrotnych. Więc możesz użyć str = "xyz\\123".

+1

Próbowałem tego, to nie działa. Drukuje odwrotny ukośnik dwa razy. Wyjście: "xyz \\ 123" – boddhisattva

+1

@boddhisattva Która jest * poprawna *, ponieważ REPL wypisuje formularz '.inspect', który dla ciągów jest formą podwójnego cudzysłowu, która może być" ewaluowana "z powrotem do odpowiednika oryginału obiekt. Spróbuj: 'puts str' i porównaj. –

+0

@ pst Dzięki .. działa teraz .. więc jest tak, że w Rails Console i IRB .. to nie drukuje tak jak z "puts str"? – boddhisattva

0

Jak wydrukować ukośnik odwrotny?

Użyj 2 ukośników odwrotnych, np. "xyz\\123"

Dlaczego "xyz\123" ocenia na "xyzS"?

W ciągu cudzysłowu \nnn jest ósemkową ucieczką.

Table 22.2. Substitutions in Double-Quoted Strings

Thomas D. (2009) Programowanie rubin, p.329

więc ósemkowej 123
= (64 * 1) + (8 * 2) + 3
= dziesiętny 83
= ASCII S

+0

jak to się ma do drukowania odwróconego ukośnika? –

0

To proste ... spróbuj funkcja zrzutu:

mystring = %Q{"Double Quotes"} 
p mystring.dump 
=> "\"\\\"Double Quotes\\\"\"" 
p mystring 
=>"\"Double Quotes\"" 
Powiązane problemy