如果我在双引号和单引号字符串的开头添加一个backslash+space,我会得到不同的结果:
"\ text"
'\ text' 在双引号字符串的输出中,我只看到一个空格。
在单引号字符串的输出中,我看到了backslash+space。
那是怎么回事?这是不是因为'\ '被解释为双引号字符串中的特殊字符,但在单引号字符串中,这些字符保持原样?
如果我将字符串改为这样,我会看到相同的输出,即单个斜杠后跟一个空格,然后是文本:
"\\ text"
'\\ text' 在这两种情况下,反斜杠都被转义。我搞不懂为什么他们在这种情况下会以同样的方式工作。
有没有一些规则可以帮助解释Ruby中单引号字符串和双引号字符串处理反斜杠的基本区别?
发布于 2009-03-15 17:29:38
我建议您参考"Ruby Programming/Strings“,以获得一个非常简洁而又全面的差异概述。
参考资料:
puts "Betty's pie shop"
puts 'Betty\'s pie shop'
因为"Betty's“包含一个撇号,这是与单引号相同的字符,所以在第二行中,我们需要使用反斜杠来转义撇号,以便Ruby理解撇号在字符串文字中,而不是标记字符串文字的末尾。后面跟着单引号的反斜杠称为转义序列。
发布于 2009-03-15 18:10:22
双引号字符串支持全范围的转义序列,如下所示:
\a Bell/alert (0x07)\b Backspace (0x08)\e Escape (0x1b)\f Formford (0x0c)\n新行(0x0a)\r Return (0x0d)\s空格(0x20)\t选项卡(0x09)\v垂直选项卡(0x0b)对于单引号字符串,两个连续的反斜杠将替换为单反斜杠,反斜杠后跟单引号将变成单引号:
'escape using "\\"' -> escape using "\"
'That\'s right' -> That's right发布于 2011-11-26 23:21:01
Ruby只解释双引号字符串中的转义序列。在单引号字符串中,只有\\ (反斜杠,反斜杠)和\' (反斜杠,引号)被视为特殊字符。只有在需要更多解释时,才应该使用双引号字符串。否则,单引号可以提供性能提升。
当您提到包含变量名称时,Ruby从来不会这样做。只有变量名被视为更多的字符串文字。要包含变量(或任何表达式)的值,请将表达式放入,如下所示:
"#{variable}"请注意,这只适用于双引号字符串。要将变量添加到单引号变量中,需要执行以下操作:
'The value of X is: '+X如果您需要严格的格式化,可以查看Ruby的sprintf和printf版本。它们几乎是C函数的包装器,功能非常强大,但使用起来有点笨拙。
https://stackoverflow.com/questions/648156
复制相似问题