【发布时间】: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
我有一个字符串,它包含像 "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
试试 puts 'Pi#$e77L09!($'
'#' 是 ruby 中用于字符串插值的特殊字符。
如果你使用 'Pi#$e77L09!($' 它会在 '#' 之前添加 \ String Literals
【讨论】:
魔法就在#。如您所知,"#{ ruby code }" 执行块中的代码并打印出来。同样,# 允许您通过在程序前面放置一个哈希来访问程序的全局变量,例如 "#$a"。
所以如果你试试这个代码。
$a = 'test'
puts "#$a"
你会看到它打印出 test.所以在你的情况下,因为 $e77L09 是一个不存在的全局变量,它什么也不打印。
如果您想将该字符串打印为字符串,您需要将其打印在单引号中。 'Pi#$e77L09!($'
“#$1 #$2”的上述用法在您使用正则表达式时非常有用。当一个字符串有多个匹配的正则表达式时,它可以使用 $1、$2、$3 等来访问。这些东西来自我相信的 Perl 世界(我对它的历史不是 100% 确定)。
编辑:像全局变量一样支持类和实例变量也可以访问。
【讨论】:
' 。当您使用 str.chars 转换 str 字符时。你可以看到有反斜杠。 \# 提取单个字符。