繁体   English   中英

如何处理q字符串和heredocument中的反斜杠“ \\”转义字符

[英]How to handle backslash “\” escape characters in q string and heredocument

Ruby Newbie在这里。 我不明白为什么Ruby会在%q内部查找并转义\\

我正在使用Ruby生成Latex代码。 我需要生成\\\\\\hline ,它在Latex中用于制作表格。 我发现\\\\\\hline作为输入生成\\hline即使字符串在%q

这是MWE

#!/usr/local/bin/ruby -w
tmp = File.open('foo.txt','w')
str = %q[\\\hline]
tmp.write(str)
tmp.close

文件foo.txt有这个

 \\hline

Ruby确实发出警告

   warning: encountered \r in middle of line, treated as a mere space

但这不应该生成,因为应该将其转义为字符串?

现在,我尝试使用Python多行原始字符串(类似于Ruby的%q

file = open('foo4.txt', 'w')
str = r"""\\\hline"""
file.write(str)
file.close()

并再次按预期包含\\\\\\hline

我在Ruby中做错了吗?

ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [i686-linux]
str = <<'TEXT'
hello %s
\\\hline
%s
TEXT

name = "Graig"
msg = "Goodbye"
puts str % [name, msg]

当定界符位于单引号中时,heredoc没有转义字符。 它确实具有插值形式。 上面的代码具有以下输出:

hello Graig
\\\hline
Goodbye

更花哨的是使用哈希进行插值:

str = <<'TEXT'
hello %{name}
\\\hline
%{msg}, %{name}
TEXT

puts str % {name: "Graig", msg: "Goodbye"}

输出:

hello Graig
\\\hline
Goodbye, Graig

%q%Q分别是单引号和双引号字符串的替代方案。 通常在字符串本身包含引号的情况下使用它们(HTML是一个典型示例),因此是为了避免嘈杂的引号转义。

单引号字符串不提供字符串插值且不转义。 除了两个例外:单引号和反斜杠本身。 %q字符串中,您不需要转义引号,而无需转义反斜杠。

puts %q[\\\\\\hline 'some words']

# >> \\\hline 'some words'

https://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM