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

我一直在阅读托马斯的“编程ruby1.9”,并提出了另类划分的单引号和双引号方法( %q / %Q )。 我也从其他Ruby语言参考中知道他们。

 %q/I'm acting like a single-quoted string/ %Q|"I'm acting like a double-quoted string" --Anonymous| 

我一直没有使用Ruby,但是我从来没有在生产代码中遇到这种引用方法。

除了显而易见的避免用反斜杠引用内部引号的能力之外,这种引用常规单引号或双引号的方法的常见用例是什么? 它们通常用于单行或多行string吗? 如果用在多行string中,他们是否比HEREDOCstring更受青睐? 有没有一个特定的Ruby习惯用法呢?

他们非常有用的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' ]) 

这样做的好处是不需要注意查询中使用的引用types。 它将与单一,双重或两者兼而有之。 他们也比HEREDOC风格的方法less得多。

Ruby提供了像这样的其他便利方法,例如可以构造正则expression式的%r 。 当试图写一个处理像http://这样的东西,否则将不得不逃脱斜线,这避免了斜线。

概观

除了“避免内部转义报价”以及之前由@tadman提供的例子之外,还有其他一些用例:

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

细节

这种方法是一种通用和强大的习惯用法,可以与任何types的自动化代码生成工具很好地配合,包括但不限于用其他语言编写样板代码的工具,或者pipe理IDE或文本编辑器代码片段的工具。

除了@tadman已经提供的例子之外,还有一个生成代码的一般情况,其中生成的代码与生成程序的代码具有相同或基本相似的语法。

在这些情况下,解决scheme不仅仅是帮助避免使用反斜杠来避免引号。 如果没有这样的解决scheme,有些情况下生成的代码可能变得非常难以维护。

要看到这个例子,请随意看看下面的参考资料。

参考

[参见例如,

]

它可能值得注意的是,当生成gemspec时,默认情况下,%q被bundler和珠宝商用于gemspec的summary / description部分。 这样可以防止某人在摘要或描述中使用引号并破坏gemspec。

我知道这是一个古老的线程,但是我在调​​用系统命令时想要插入一些值,在生产中使用它们,如下所示:

  system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}")) 

超方便。

当你的string包含单引号或双引号时,它们很有用。 这种情况不会经常发生,但是这种技术非常有用。