只有当字符串中同时存在插值与双引号,且是单行时,才使用 %()
(%Q
的简写形式)。多行字符串,倾向使用 heredocs。
[link]
# 差 - 不存在插值
%(<div class="text">Some text</div>)
# 应当使用 '<div class="text">Some text</div>'
# 差 - 不存在双引号
%(This is #{quality} style)
# 应当使用 "This is #{quality} style"
# 差 - 多行字符串
%(<div>\n<span class="big">#{exclamation}</span>\n</div>)
# 应当使用 heredocs
# 好 - 同时存在插值与双引号,且是单行字符串
%(<tr><td class="name">#{name}</td>)
避免使用 %()
或 %q
,除非字符串同时存在 '
与 "
。优先考虑更具可读性的常规字符串,除非字符串中存在大量需要转义的字符。
[link]
# 差
name = %q(Bruce Wayne)
time = %q(8 o'clock)
question = %q("What did you say?")
# 好
name = 'Bruce Wayne'
time = "8 o'clock"
question = '"What did you say?"'
quote = %q(<p class='quote'>"What did you say?"</p>)
只有当正则表达式中存在一个或以上的 /
字符时,才使用 %r
。
[link]
# 差
%r{\s+}
# 好
%r{^/(.*)$}
%r{^/blog/2011/(.*)$}
除非调用的命令使用了反引号(这种情况并不多见),否则不要使用 %x
。
[link]
# 差
date = %x(date)
# 好
date = `date`
echo = %x(echo `date`)
避免使用 %s
。倾向使用 :"some string"
来创建含有空白字符的符号。
[link]
针对不同的百分号字面量,使用不同的括号类型。
[link]
- 针对构建字符串的
%q
, %Q
字面量,使用 ()
。 - 针对构建数组的
%w
, %i
, %W
, %I
字面量,使用 []
,以与常规的数组字面量保持一致。 - 针对构建正则的
%r
字面量,使用 {}
,此乃惯例。 - 针对
%s
, %x
等其他字面量,使用 ()
。
# 差
%q{"Test's king!", John said.}
# 好
%q("Test's king!", John said.)
# 差
%w(one two three)
%i(one two three)
# 好
%w[one two three]
%i[one two three]
# 差
%r((\w+)-(\d+))
%r{\w{1,2}\d{2,5}}
# 好
%r{(\w+)-(\d+)}
%r|\w{1,2}\d{2,5}|