ruby 2.1.2中的“#$e”是啥意思

Posted

技术标签:

【中文标题】ruby 2.1.2中的“#$e”是啥意思【英文标题】: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

【问题讨论】:

【参考方案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 很明显,这是用户输入的值。在数据库中,它用反斜杠保存,因此遇到身份验证问题...

以上是关于ruby 2.1.2中的“#$e”是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 中的“猴子补丁”到底是啥意思?

Ruby 中的语法 [*a..b] 是啥意思?

Ruby 中的 CSV.open 中的 rb:bom|utf-8 是啥意思?

Ruby 中的“temps.each(&:valid?)”是啥意思? [复制]

Ruby 示例中的 DCI 中的 Thread.current 是啥?

R中的统计测试中的0 0.000e + 00是啥意思?