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://
必须进行转义的东西.
dre*_*mac 10
除了"避免内部转义引号"以及之前由@tadman提供的示例之外,还有其他用例:
这种方法是一种通用且强大的习惯用法,适用于任何类型的自动代码生成工具,包括但不限于用其他语言编写样板代码的工具,或管理IDE或文本编辑器的代码片段的工具.
除了已经由@tadman提供的示例之外,还存在生成代码的一般情况,其中生成的代码与生成程序的代码具有相同或基本相似的语法.
在这些情况下,解决方案不仅仅是帮助避免使用反斜杠来逃避引号.如果没有这样的解决方案,有时候生成的代码很难维护.
要查看此示例,请随时查看以下参考资料.
[见例如,
]
我知道这是一个旧线程,但我在生产中调用系统命令并想要插入一些值时使用了它们,如下所示:
system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))
Run Code Online (Sandbox Code Playgroud)
超级方便。