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

Mic*_*ski 70 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|
Run Code Online (Sandbox Code Playgroud)

我没有使用Ruby很长时间,但我从未在生产代码中遇到过这种引用方法.

除了明显的避免内部使用反斜杠转义引号的能力之外,这种引用常规单引号还是双引号的方法有哪些常见用例?它们通常用于单行还是多行字符串?如果在多行字符串中使用,它们是否比HEREDOC字符串更受青睐?是否有一个特殊的Ruby成语,它们常见于何处?

tad*_*man 109

它们对于使用JavaScript转义HTML非常有用,其中你已经"用完"了引用方法:

link = %q[<a href="javascript:method('call')">link</a>]
Run Code Online (Sandbox Code Playgroud)

我还发现它们在处理多行SQL语句时非常有用:

execute(%Q[
  INSERT INTO table_a (column_a)
    SELECT value
      FROM table_b
      WHERE key='value'
])
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您不需要关注查询中使用的引用类型.它可以使用单个,双个或两个.他们也比HEREDOC风格方法少得多.

Ruby提供了这样的其他便利方法,例如%r可以构造正则表达式.这样可以避免斜线 - 当尝试编写一个处理其他东西时http://必须进行转义的东西.

  • 不同意heredocs虽然麻烦:) (4认同)

dre*_*mac 10

概观

除了"避免内部转义引号"以及之前由@tadman提供的示例之外,还有其他用例:

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

细节

这种方法是一种通用且强大的习惯用法,适用于任何类型的自动代码生成工具,包括但不限于用其他语言编写样板代码的工具,或管理IDE或文本编辑器的代码片段的工具.

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

在这些情况下,解决方案不仅仅是帮助避免使用反斜杠来逃避引号.如果没有这样的解决方案,有时候生成的代码很难维护.

要查看此示例,请随时查看以下参考资料.

参考

[见例如,

]


Rya*_*ebo 5

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

 system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))
Run Code Online (Sandbox Code Playgroud)

超级方便。