【问题标题】:what is the meaning of "#$e" in ruby 2.1.2ruby 2.1.2中的“#$e”是什么意思
【发布时间】:2021-02-16 13:43:39
【问题描述】:

我有一个字符串,它包含像 "Pi#$e77L09!($" 这样的字符。

但是当我尝试在控制台上打印时,它的打印结果就像“Pi!($”

2.1.2 :002 > str = "Pi#$e77L09!($" => "Pi!($"

2.1.2 :003 > puts str Pi!($ => nil

【问题讨论】:

    标签: ruby-on-rails ruby ruby-2.1


    【解决方案1】:

    试试 puts 'Pi#$e77L09!($'

    '#' 是 ruby​​ 中用于字符串插值的特殊字符。

    如果你使用 'Pi#$e77L09!($' 它会在 '#' 之前添加 \ String Literals

    【讨论】:

      【解决方案2】:

      魔法就在#。如您所知,"#{ ruby code }" 执行块中的代码并打印出来。同样,# 允许您通过在程序前面放置一个哈希来访问程序的全局变量,例如 "#$a"

      所以如果你试试这个代码。

      $a = 'test'
      puts "#$a"
      

      你会看到它打印出 test.所以在你的情况下,因为 $e77L09 是一个不存在的全局变量,它什么也不打印。

      如果您想将该字符串打印为字符串,您需要将其打印在单引号中。 'Pi#$e77L09!($'

      “#$1 #$2”的上述用法在您使用正则表达式时非常有用。当一个字符串有多个匹配的正则表达式时,它可以使用 $1、$2、$3 等来访问。这些东西来自我相信的 Perl 世界(我对它的历史不是 100% 确定)。

      编辑:像全局变量一样支持类和实例变量也可以访问。

      【讨论】:

      • @Stefan 感谢您提供该信息,已更新答案。我在正则表达式中使用了很多,但从未意识到对实例和类变量也这样做。
      • str = 'Pi#$e77L09!($' => "Pi\#$e77L09!($"
      • 我尝试使用单引号,但在该字符串中打印反斜杠@coderhs
      • @VishuKolekar 你想要反斜杠还是不想要它?基本上,当您将该单引号字符串存储到变量时,它会放置反斜杠以表示它不是特殊字符。当您使用 puts 打印它时,您会看到它没有显示 ' 。当您使用 str.chars 转换 str 字符时。你可以看到有反斜杠。 \# 提取单个字符。
      • @coderhs 很明显,这是用户输入的值。在数据库中,它用反斜杠保存,因此遇到身份验证问题...
      猜你喜欢
      • 2010-11-06
      • 2020-03-03
      • 2015-09-21
      • 2019-05-07
      • 2011-04-18
      • 2016-08-17
      • 2015-08-04
      • 2016-09-17
      相关资源
      最近更新 更多