百分号字面量


  • 只有当字符串中同时存在插值与双引号,且是单行时,才使用 %()%Q 的简写形式)。多行字符串,倾向使用 heredocs。
    [link]

    1. # 差 - 不存在插值
    2. %(<div class="text">Some text</div>)
    3. # 应当使用 '<div class="text">Some text</div>'
    4. # 差 - 不存在双引号
    5. %(This is #{quality} style)
    6. # 应当使用 "This is #{quality} style"
    7. # 差 - 多行字符串
    8. %(<div>\n<span class="big">#{exclamation}</span>\n</div>)
    9. # 应当使用 heredocs
    10. # 好 - 同时存在插值与双引号,且是单行字符串
    11. %(<tr><td class="name">#{name}</td>)

  • 避免使用 %()%q,除非字符串同时存在 '"。优先考虑更具可读性的常规字符串,除非字符串中存在大量需要转义的字符。
    [link]

    1. # 差
    2. name = %q(Bruce Wayne)
    3. time = %q(8 o'clock)
    4. question = %q("What did you say?")
    5. # 好
    6. name = 'Bruce Wayne'
    7. time = "8 o'clock"
    8. question = '"What did you say?"'
    9. quote = %q(<p class='quote'>"What did you say?"</p>)

  • 只有当正则表达式中存在一个或以上的 / 字符时,才使用 %r
    [link]

    1. # 差
    2. %r{\s+}
    3. # 好
    4. %r{^/(.*)$}
    5. %r{^/blog/2011/(.*)$}

  • 除非调用的命令使用了反引号(这种情况并不多见),否则不要使用 %x
    [link]

    1. # 差
    2. date = %x(date)
    3. # 好
    4. date = `date`
    5. echo = %x(echo `date`)

  • 避免使用 %s。倾向使用 :"some string" 来创建含有空白字符的符号。
    [link]


  • 针对不同的百分号字面量,使用不同的括号类型。
    [link]

    • 针对构建字符串的 %q, %Q 字面量,使用 ()
    • 针对构建数组的 %w, %i, %W, %I 字面量,使用 [],以与常规的数组字面量保持一致。
    • 针对构建正则的 %r 字面量,使用 {},此乃惯例。
    • 针对 %s, %x 等其他字面量,使用 ()
    1. # 差
    2. %q{"Test's king!", John said.}
    3. # 好
    4. %q("Test's king!", John said.)
    5. # 差
    6. %w(one two three)
    7. %i(one two three)
    8. # 好
    9. %w[one two three]
    10. %i[one two three]
    11. # 差
    12. %r((\w+)-(\d+))
    13. %r{\w{1,2}\d{2,5}}
    14. # 好
    15. %r{(\w+)-(\d+)}
    16. %r|\w{1,2}\d{2,5}|