跳转到内容

Ruby Programming/Alternate quotes

维基教科书,自由的教学读本

← Strings | Here documents →

Ruby 提供了许多种表示字串括号的方法。

单引号的替用者

[编辑]

举例而言,我们想用字串表达档案路径名称时,通常用单引号括起字串内容,如下所示:

puts 'c:\bus schedules\napolean\the portland bus schedule.txt'

用单引号括起字串内容时,不会转义其中的 \b, \n, 和 \t 字元,故得以直率地表达档案路径。但如果档案路径名称之中含有 ' 时,我们就要写成 \' ,如下所示:

puts 'c:\napolean\'s bus schedules\tomorrow\'s bus schedule.txt'

当字串中含有许多转义字元时,将会降低程式的可读性。所幸在 Ruby 中有更好的方式可用。你可以用 %q 自定括号,以 %q 自定之括号将套用单引号括号规则。你可以指定任何字元为括号。底下示范自定括号的用法,每一行都会印出同样的文字 - "c:\napolean's documents\tomorrow's bus schedule.txt" 。

puts %q!c:\napolean's documents\tomorrow's bus schedule.txt!
puts %q/c:\napolean's documents\tomorrow's bus schedule.txt/
puts %q^c:\napolean's documents\tomorrow's bus schedule.txt^
puts %q(c:\napolean's documents\tomorrow's bus schedule.txt)
puts %q{c:\napolean's documents\tomorrow's bus schedule.txt}
puts %q<c:\napolean's documents\tomorrow's bus schedule.txt>

若你选择的自定括号也同样被用于字串文字,你仍然需要转义。如下例以 # 为自定括号,但字串文字中也有一个 # 字元,此时就要写成 \#

 puts %q#c:\napolean's documents\tomorrow's \#9 bus schedule.txt#

当然我们用自定括号的意义在于避免这种情形,所以应尽量选用不会出现在字串文字中的字元做为自定括号。若你使用可成对的括弧字元为自定括号,你可用巢状括弧而不需转义。

puts %q(c:\napolean's documents\the (bus) schedule.txt)
puts %q{c:\napolean's documents\the {bus} schedule.txt}
puts %q<c:\napolean's documents\the <bus> schedule.txt>

双引号的替用者

[编辑]

%Q 允许你自定套用双引号括号规则的括号符号,其用法如同 %q

print %Q^Say:\tHello world\n\tHello world\n^
print %Q(Say:\tHello world\n\tHello world\n)

你同样可以在其中嵌入 Ruby 算式窜写字串内容。

name = 'Charlie Brown'

puts %Q!Say "Hello," #{name}.!
puts %Q/What is "4 plus 5"? Answer: #{4+5}/