Ruby的%q /%Q引用方法的用例是什么?

时间:2012-04-13 16:16:13

标签: ruby string quotes

我一直在阅读托马斯的编程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成语,它们常见于哪里?

5 个答案:

答案 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提供的示例之外还有其他用例:

  • 使用与生成器本身相同的语言自动生成代码(例如,Ruby生成Ruby)
  • 提供干净格式的代码,不会混淆文本编辑器的语法高亮功能
  • 允许存储可能必须通过多个存储层的代码块(例如与网站交互的数据库,或与文本编辑器交互的片段管理系统,与子shell交互,等等)

详细信息

这种方法是一种通用且强大的习惯用法,适用于任何类型的自动代码生成工具,包括但不限于用其他语言编写样板代码的工具,或管理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)

当您的字符串包含单引号或双引号时,它们非常有用。这种情况并非经常发生,但该技术非常有用。