2012-04-10 81 views
6

我有一個字符串str = "xyz\123",我想按原樣打印它。如何在Ruby中打印反斜槓的字符串

IRB給了我一個意想不到的輸出。請看以下不同: -

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

我如何能得到IRB打印原始字符串即「某某\ 123」任何想法。

謝謝。

UPDATE

我試圖逃跑,但它似乎並沒有那麼簡單出於某種原因。請在下面找到我用同樣的試驗:

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

「只是逃避它。」或者,「閱讀教程」。選一個。你也可能需要'.inspect'。 – 2012-04-10 04:54:23

+1

我不知道爲什麼這個問題被拒絕投票.. – boddhisattva 2012-04-18 06:04:43

回答

5

修訂的答案:

逃生記號「\」總是以純Ruby代碼的工作,但並不總是在「紅寶石控制檯」工作。所以我建議你寫一個單元測試:

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

,您將得到結果爲:

hi\backslash 

,看看@ PST的評論。

+1

我試過這個,它不起作用。它打印兩次反斜槓。輸出:「xyz \\ 123」 – boddhisattva 2012-04-10 05:02:38

+0

@boddhisattva這是正確的。在Hophat的答案下看到我的評論。 – 2012-04-10 05:07:27

+0

@boddhisattva,我更新了我的答案。 – 2012-04-10 05:26:27

3

反斜線字符是一個轉義字符。你可能看到「\ n」被用來顯示一個新行,這就是爲什麼。 「\ 123」將83代碼的ASCII代碼解析爲「S」。要打印反斜槓,請使用2個反斜槓。所以你可以使用str = "xyz\\123"

+1

我試過了,它不起作用。它打印兩次反斜槓。輸出:「xyz \\ 123」 – boddhisattva 2012-04-10 05:01:04

+1

@boddhisattva這是*正確的*,因爲REPL打印了「.inspect」表單,對於字符串來說,這是雙引號形式,可以將其「eval」編輯回原始目的。嘗試:'放大str'並進行比較。 – 2012-04-10 05:06:19

+0

@pst謝謝..現在工作..所以它只是在Rails Console和IRB ..它不會像「puts str」一樣打印? – boddhisattva 2012-04-10 05:32:29

0

如何打印反斜槓?

使用2個反斜槓,例如, "xyz\\123"

爲什麼"xyz\123"評價爲"xyzS"

在雙引號字符串中,\nnn八進制轉義

Table 22.2. Substitutions in Double-Quoted Strings

托馬斯,D。(2009)編程紅寶石,p.329

所以,八進制123
=(64 * 1)+(8 * 2)+ 3
=十進制83
= ASCII S

+0

這與打印反斜槓有什麼關係? – 2016-03-13 06:18:22

0

很簡單...嘗試轉儲功能:

mystring = %Q{"Double Quotes"} 
p mystring.dump 
=> "\"\\\"Double Quotes\\\"\"" 
p mystring 
=>"\"Double Quotes\"" 
相關問題