作者yzugsr (Bird)
看板Ruby
標題Re: [問題] Ruby RegExpr 的疑惑
時間Fri Nov 9 03:03:23 2007
※ 引述《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
1F:推 zhadow:應該不是哦 11/09 03:50
2F:→ zhadow:p和 return value顯示的是string literals,而不是實際的值 11/09 04:02
3F:推 godfat:原來如此 @@ 怪不得我想不通 11/09 13:04
4F:→ godfat:不過為什麼要有這麼令人困惑的實作方式? 11/09 13:22
5F:推 zhadow:可是我覺得上篇 LyinZ 的解釋才是對的耶 11/09 18:48
6F:推 godfat:他說的沒有錯,但我不知道這跟這問題有什麼關係? 11/09 21:42
7F:推 yzugsr:啊啊 我發現上篇才是對的 我錯了 11/09 22:20
8F:→ yzugsr:的確是輸出string literal的關係 11/09 22:20
9F:→ yzugsr:沒有在puts時把escape character再解讀一次這回事 11/09 22:20
※ 編輯: yzugsr 來自: 123.193.36.11 (11/09 22:21)