【问题标题】:Ruby string prepend '\' characterRuby 字符串前置 '\' 字符
【发布时间】:2014-07-18 12:32:28
【问题描述】:

为什么当我试图在代码下面运行时,ruby 会在前面加上“\”字符。只有 '#$' 会发生这种情况

所有 ruby​​ 版本都会发生这种情况。

puts '#$'   => '\#$'

'#$'  => '\#$'

'mypassord#$123'  =>  'mypassord\#$123'

请在这里分享您的经验。是红宝石问题还是什么?

【问题讨论】:

  • 你显示的输出,我没有得到完全一样的东西。你有没有最小化一些东西? :-) 我收到"\\\#$"
  • @ArupRakshit 不,只需打开 irb 并输入“#$”。我明白了。
  • 是的。如果我在 IRB 中运行它,我会得到上面显示的内容。但是如果我从Vim 命令提示符运行它,我会得到'#$'
  • 好吧..来自 vim 现在 puts '#$'.inspect 提供的和你的完全一样。
  • 我猜你们都错了。 Ruby 的字符串检查使用双引号。它应该是"\#$",这是至关重要的,因为单引号字符串文字没有插值。

标签: ruby string ruby-2.0


【解决方案1】:

不,这不是红宝石问题。这是你的问题。由于#$foo 可以解释为全局变量$foo 的插值,因此需要对# 字符进行转义。这就是为什么有一个反斜杠。

更准确地说,不可能用字符串"#$"$ 是一个无效的全局变量)或"#$123"$123 是一个无效的全局变量)进行插值,但它使检查算法或插值算法复杂,检查#$之后的序列,所以我猜这就是为什么#即使在这种情况下也会被转义。

【讨论】:

  • 你是对的。 IRB 调用 #inspect,这使它成为 双引号字符串。规则明智,inside double quoted string all especial characters must be escaped# 在双引号字符串中具有特殊含义,因此必须使用 反斜杠 停止。
  • @ArupRakshit 这不太正确。 # 本身不是特殊字符 ("foo#bar")。它取决于上下文。
  • 是的..这就是我的意思.. :-) 你用了正确的词
  • Ruby 插值适用于双引号,但我使用的是单引号...单引号不应该发生这种情况。
  • RKP.. 你在IRB 中使用它,IRB 通过调用#inspect 使其双引号
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 2021-05-30
  • 2015-01-13
  • 2019-11-19
相关资源
最近更新 更多