首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单引号字符串中的反斜杠与双引号字符串中的反斜杠

问单引号字符串中的反斜杠与双引号字符串中的反斜杠
EN

Stack Overflow用户
提问于 2009-03-15 17:08:00
回答 6查看 29.8K关注 0票数 29

如果我在双引号和单引号字符串的开头添加一个backslash+space,我会得到不同的结果:

代码语言:javascript
复制
"\ text"
'\ text' 

在双引号字符串的输出中,我只看到一个空格。

在单引号字符串的输出中,我看到了backslash+space。

那是怎么回事?这是不是因为'\ '被解释为双引号字符串中的特殊字符,但在单引号字符串中,这些字符保持原样?

如果我将字符串改为这样,我会看到相同的输出,即单个斜杠后跟一个空格,然后是文本:

代码语言:javascript
复制
"\\ text"
'\\ text' 

在这两种情况下,反斜杠都被转义。我搞不懂为什么他们在这种情况下会以同样的方式工作。

有没有一些规则可以帮助解释Ruby中单引号字符串和双引号字符串处理反斜杠的基本区别?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-03-15 17:29:38

我建议您参考"Ruby Programming/Strings“,以获得一个非常简洁而又全面的差异概述。

参考资料:

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

因为"Betty's“包含一个撇号,这是与单引号相同的字符,所以在第二行中,我们需要使用反斜杠来转义撇号,以便Ruby理解撇号在字符串文字中,而不是标记字符串文字的末尾。后面跟着单引号的反斜杠称为转义序列。

票数 8
EN

Stack Overflow用户

发布于 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)

对于单引号字符串,两个连续的反斜杠将替换为单反斜杠,反斜杠后跟单引号将变成单引号:

代码语言:javascript
复制
'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right
票数 23
EN

Stack Overflow用户

发布于 2011-11-26 23:21:01

Ruby只解释双引号字符串中的转义序列。在单引号字符串中,只有\\ (反斜杠,反斜杠)和\' (反斜杠,引号)被视为特殊字符。只有在需要更多解释时,才应该使用双引号字符串。否则,单引号可以提供性能提升。

当您提到包含变量名称时,Ruby从来不会这样做。只有变量名被视为更多的字符串文字。要包含变量(或任何表达式)的值,请将表达式放入,如下所示:

代码语言:javascript
复制
"#{variable}"

请注意,这只适用于双引号字符串。要将变量添加到单引号变量中,需要执行以下操作:

代码语言:javascript
复制
'The value of X is: '+X

如果您需要严格的格式化,可以查看Ruby的sprintf和printf版本。它们几乎是C函数的包装器,功能非常强大,但使用起来有点笨拙。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/648156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档