【问题标题】:Ruby text variable with \ inside带有 \ 的 Ruby 文本变量
【发布时间】:2022-01-17 19:12:56
【问题描述】:

我需要创建一个带有该值的列的数据库记录

query = "booster pro 12\24 v" 

但这是存储在 db 列中的内容。

"booster pro 12\u0014 v"

如果我尝试使用单引号,我会得到

'booster pro 12\24 v' -> "booster pro 12\\24 v"

但如果我使用它,我会打印出正确的字符串。

puts 'booster 12\24 v' -> booster 12\24 v

【问题讨论】:

  • “如果我使用它,我会打印出正确的字符串”——那是因为你找到了正确的解决方案。反斜杠是转义字符。在双引号字符串中,您必须使用另一个反斜杠(或使用单引号)转义文字反斜杠。请参阅string literals 的文档。
  • 顺便说一句,"\24" 被解释为 "\024",即 八进制 数字 024,十进制为 20,十六进制为 0x14。因此"\24" == "\u0014"

标签: ruby


【解决方案1】:

如果我尝试使用单引号,我会得到

'booster pro 12\24 v' -> "booster pro 12\\24 v"

这是正确的。你已经得到了正确的答案。

反斜杠是转义字符。在双引号字符串中显示转义字符时,必须使用反斜杠对其进行转义。这意味着 literal 反斜杠由 两个 反斜杠表示。

两个文字反斜杠将由 四个 反斜杠表示,在双引号字符串中。

或者例如,考虑:

  • 您将如何显示 换行符 字符?答:"\n"
  • 如何显示一个反斜杠字符,后跟一个“n”?答:"\\n"

此行为并非特定于 ruby​​。

【讨论】:

  • 反斜杠也是 ANSI SQL 中的转义字符,但我不能 100% 确信它适用于所有可以想象的数据库。
  • 我没有说“这是特定于每个可以想象的数据库和语言”,我只是说它不是特定于 ruby​​ ;) .... 但是,作为转义字符的反斜杠是 非常常见的行为。
  • 好的,谢谢。因此,即使它作为“booster pro 12\\24 v”(带有双反斜杠)存储到 db 中也没关系。
  • 您不会存储双反斜杠。您将其显示为双反斜杠。因为否则,如上所示,将无法区分例如反斜杠后跟 n 与换行符。
  • 双反斜杠将显示为四个反斜杠。四个反斜杠将显示为 8 个反斜杠。 8 个反斜杠将显示为 16 个反斜杠...
猜你喜欢
  • 2016-12-25
  • 2015-09-16
  • 2019-08-01
  • 2020-05-18
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
相关资源
最近更新 更多