单单字符串与双引号字符串中的backslashes

问题描述 投票:0回答:5
如果我在双人和单引号字符串的开始中添加了一个后斜线+空间,我会得到不同的结果:

"\ text" '\ text'
在双引号字符串的输出中,我只看到一个空间。
在单引号字符串的输出中,我看到了BackSlash+Space。

那里发生了什么?这是因为
'\ '

被解释为双引号字符串中的特殊字符,但是在单个引用字符串中,字符保存如

如果我将字符串更改为此,我会看到相同的输出,即单个斜线,然后是一个空间,然后是文本:

"\\ text" '\\ text'

在两种情况下,后斜线都被逃脱了。我很困惑为什么他们在这种情况下以同样的方式工作。 

有一些规则可以帮助解释单个引用的字符串和双引号字符串如何处理Ruby中的后斜线之间的根本区别?

ruby string quotes literals backslash
5个回答
24
投票

    \a
  • 铃响/警报(0x07)
  • \b
  • backspace(0x08)
  • \e
  • 逃脱(0x1b)
  • \f
  • formford(0x0c)
  • \n
  • newline(0x0a)
  • \r
  • 返回(0x0d)
  • \s
  • 空间(0x20)
  • \t
  • 选项卡(0x09)
  • \v
  • 垂直选项卡(0x0b)
    
    
    
  • 对于单引号的字符串,两个连续的后斜线被一个后斜切取代,而后斜切则是单个报价,将其变成一个报价:

'escape using "\\"' -> escape using "\" 'That\'s right' -> That's right


ruby仅在双引号字符串中解释逃脱序列。在一个引号的字符串中,只有

11
投票
(后斜线后斜击)和

\'

(Backslash Quote)被视为特殊字符。仅当您需要更多解释时,才应该使用双引号字符串。否则,单引号会提供性能提升。

当您提到包括变量的名称时,Ruby永远不会做到这一点。只有变量名称被视为字符串文字。要包括变量(或任何表达式)的值,将表达式放在这样的情况下:
"#{variable}"

注意,这仅在双引号的字符串中起作用。要向一个引用的变量添加一个变量,您需要执行此操作:

'The value of X is: '+X

如果您需要认真的格式,请查看Ruby的Sprintf和printf版本。它们几乎是C函数周围的包装器,并且功能非常强大,但有点麻烦。

我将您参考“ ruby编程/字符串”,以进行差异的非常简洁而全面的概述。

参考:


8
投票

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

由于“ Betty's”包含一个撇号,它与单个报价是相同的字符,在第二行中,我们需要使用后倾斜来逃脱撇号,以便Ruby了解撇号在字符串中,而不是在字符串中,而不是标记末端的末端字符串字面。后斜线紧随其后的报价称为逃生序列。

    

这不是一个完整的答案(因为已经回答了简单的问题),而是补充信息。

红弦字符串的哪种风格您喜欢?


4
投票
如果您必须使用双引号 逃脱他们。而且不要落入“单身” vs双引号“陷阱。Ruby有 对任意的出色支持 字符串文字的分界符:

(以前来自rors.org/2008/10/26/dont-escape-in-sinting,现在死了)

我接受了这个建议,再也没有回头!

是因为“ \”是 被解释为特殊角色 双引号字符串,但在 单引号字符串字符 保存原样?

是的。单引号的字符串被视为文字;双引号的字符串被插值。在其他类似Ruby的语言中也是如此,并且在1.9中没有更改。

你可以做

3
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.