Ruby 编程/替代引号
外观
< Ruby 编程
在 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}/