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 中的 CSV.open 中的 rb:bom|utf-8 是啥意思?
Ruby 中的“temps.each(&:valid?)”是啥意思? [复制]