Ruby中的三重单引号与三重双引号

时间:2015-02-14 00:57:03

标签: ruby escaping

为什么您可以使用'''代替""",如Learn Ruby the Hard Way, Chapter 10 Study Drills

4 个答案:

答案 0 :(得分:8)

Ruby中没有三重引号。

并列的两个String文字被解析为单个String文字。所以,

'Hello' 'World'

相同
'HelloWorld'

并且

'' 'Hello' ''

相同
'''Hello'''

相同
'Hello'

三重单引号与三重双引号没有特殊规则,因为没有三重引号。规则与报价相同。

答案 1 :(得分:3)

我认为作者混淆了Ruby和Python,因为三重引用在Ruby中不会像作者想象的那样工作。它只是像三个单独的字符串('' '' '')一样工作。

对于多行字符串,可以使用:

%q{
 your text
 goes here
}
 => "\n     your text\n     goes here\n    "

%Q{}如果您需要内部字符串插值。

答案 2 :(得分:2)

三引号'''与单引号'相同,因为它们不会插入任何#{}个序列,转义字符(例如" \ n&# 34;)等。

三重双引号(ugh)"""与双引号"相同,因为它们执行插值和转义序列。

这是在您链接的同一页面上。

三重引用版本""" ''''允许使用多行字符串...与单引号'"一样,所以我不会&#39 ;不知道为什么两者都可用。

答案 3 :(得分:-2)

在Ruby """中支持插值,'''不支持插值。

Rubyists对多行字符串使用三引号(类似于'heredocs')。

您可以轻松地使用这些字符之一。

就像普通字符串一样,双引号允许您在字符串内部使用变量(也称为“插值”)。

将其保存到名为multiline_example.rb的文件中并运行它:

interpolation = "(but this one can use interpolation)"

single = '''
This is a multi-line string.
'''

double = """
This is also a multi-line string #{interpolation}.
"""

puts single
puts double

这是输出:

$ ruby multiline_string_example.rb

This is a multi-line string.

This is also a multi-line string (but this one can use interpolation).

$

现在尝试另一种方法:

nope = "(this will never get shown)"

single = '''
This is a multi-line string #{nope}.
'''

double = """
This is also a multi-line string.
"""

puts single
puts double

您将获得以下输出:

$ ruby multiline_example.rb

This is a multi-line string #{nope}.

This is also a multi-line string.

$

请注意,在两个示例中,您的输出中都有一些额外的换行符。这是因为多行字符串在其中保留了所有换行符,而puts向每个字符串添加了换行符。