看板 Ruby 關於我們 聯絡資訊
※ 引述《zhadow (zzz)》之銘言: : 我在 programming ruby 中看到 : puts '\\a\\b\\c'.gsub(/\\/,'\\\\') 的結果是 \a\b\c : 而不是 \\a\\b\\c : 看了書中的說明還是搞不清為什麼, : 請問原理是什麼呢? (update:下面的回答應該是錯誤的 詳見推文討論) 實驗了一下,應該是puts搞的鬼 puts和printf("%s", ...)會把escape character再解讀一次 irb(main):074:0> puts '\\a\\b\\c'.gsub(/\\/,'\\\\') \a\b\c=> nil irb(main):075:0> printf("%s", '\\a\\b\\c'.gsub(/\\/,'\\\\')) \a\b\c=> nil irb(main):076:0> p '\\a\\b\\c'.gsub(/\\/,'\\\\') "\\a\\b\\c"=> nil irb(main):077:0> '\\a\\b\\c'.gsub(/\\/,'\\\\') => "\\a\\b\\c" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.36.11
zhadow:應該不是哦 11/09 03:50
zhadow:p和 return value顯示的是string literals,而不是實際的值 11/09 04:02
godfat:原來如此 @@ 怪不得我想不通 11/09 13:04
godfat:不過為什麼要有這麼令人困惑的實作方式? 11/09 13:22
zhadow:可是我覺得上篇 LyinZ 的解釋才是對的耶 11/09 18:48
godfat:他說的沒有錯,但我不知道這跟這問題有什麼關係? 11/09 21:42
yzugsr:啊啊 我發現上篇才是對的 我錯了 11/09 22:20
yzugsr:的確是輸出string literal的關係 11/09 22:20
yzugsr:沒有在puts時把escape character再解讀一次這回事 11/09 22:20
※ 編輯: yzugsr 來自: 123.193.36.11 (11/09 22:21)