跳至内容

Ruby 编程/替代引号

来自 Wikibooks,为开放世界提供开放书籍

← 字符串 | Here 文档 →


在 Ruby 中,用引号括住字符串文本的方法不止一种。其中很多方法对于 Perl 程序员来说并不陌生。

这些替代方法是

  • 带有 %q 运算符的单引号:%q(abc) 等同于 'abc'
  • 带有 %Q 运算符的双引号:%Q(abc's) 等同于 "abc's"

替代单引号

[编辑 | 编辑源代码]

假设我们使用单引号打印以下路径。

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

这将产生以下输出

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

单引号保留了 \b\n\t,防止它们被当作 转义序列 处理(Wikibooks 的语法高亮显示无法做到这一点)。

现在让我们考虑以下字符串文本

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

这将输出

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

对撇号进行转义会降低代码的可读性,并且无法直观地了解到会打印出什么内容。

幸运的是,在 Ruby 中,有一个更好的方法。可以使用 %q 运算符来应用 单引号规则,并选择你自己的 分隔符。这个分隔符将标记字符串文本的开始和结束。

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>

每一行都将打印出相同的文本

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 中的 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}/
华夏公益教科书