作者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)