我一直在阅读托马斯的编程Ruby 1.9,并发现了替代分隔的单引号和双引号方法(%q / %Q
)。我也从其他Ruby语言参考中了解它们。
%q/I'm acting like a single-quoted string/
%Q|"I'm acting like a double-quoted string" --Anonymous|
我没有使用Ruby很长时间,但我从未在生产代码中遇到过这种引用方法。
除了使用反斜杠明显避免内部转义引号的能力之外,这种引用常规单引号或双引号的方法有哪些常见用例?它们通常用于单行还是多行字符串?如果在多行字符串中使用,它们是否比HEREDOC字符串更受青睐?是否有一个特殊的Ruby成语,它们常见于哪里?
答案 0 :(得分:109)
它们对于使用JavaScript转义HTML非常有用,因为它已经“用完”引用方法:
link = %q[<a href="javascript:method('call')">link</a>]
我还发现它们在使用多行SQL语句时非常有用:
execute(%Q[
INSERT INTO table_a (column_a)
SELECT value
FROM table_b
WHERE key='value'
])
这样做的好处是您无需关注查询中使用的引用类型。它可以使用单个,双个或两个。他们也比HEREDOC风格方法少得多。
Ruby提供了这样的其他便利方法,例如可以构造正则表达式的%r
。这样可以避免在尝试编写一个处理http://
之类的东西时使用斜杠,否则必须将其转义。
答案 1 :(得分:10)
除了“避免内部转义引号”以及之前由@tadman提供的示例之外还有其他用例:
这种方法是一种通用且强大的习惯用法,适用于任何类型的自动代码生成工具,包括但不限于用其他语言编写样板代码的工具,或管理IDE代码片段的工具或文本编辑器。
除了@tadman已经提供的示例之外,还存在生成代码的一般情况,其中生成的代码与生成程序的代码具有相同或基本相似的语法。
在这些情况下,解决方案不仅仅是帮助避免使用反斜杠来逃避引号。如果没有这样的解决方案,有时候生成的代码很难维护。
要查看此示例,请随时查看以下参考资料。
[见例如,
答案 2 :(得分:3)
或许值得注意的是,在为gemspec的摘要/描述部分生成gemspec时,默认情况下捆绑器和珠宝商使用%q。这可以防止有人在摘要或说明中使用引号并破坏gemspec。
答案 3 :(得分:3)
我知道这是一个旧线程,但是我在调用system命令并且想要插入一些值时在生产中使用它们,如下所示:
system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))
非常方便。
答案 4 :(得分:-1)
当您的字符串包含单引号或双引号时,它们非常有用。这种情况并非经常发生,但该技术非常有用。