字符串中的“@”符号导致意外结果

`@` symbol in string causes unexpected results

似乎当 @ 符号与 # 符号配对时开始忽略某些字符。它甚至在 %{} 定界符内执行此操作。这是怎么回事?

"1#@ #9"
#=> "1\#@ #9"
"1#@X#9"
#=> "1#9"
"1#@XXX#9"
#=> "1#9"
"1#@X123#9"
#=> "1#9"
"1#\@X123#9"
#=> "1\#@X123#9"
"#"
#=> "#"
"@"
#=> "@"
"\@"
#=> "@"
"@XX"
#=> "@XX"
"1@XX1"
#=> "1@XX1"
"#@XX#"
#=> "#"

@是Ruby中实例变量的印记,当它跟在#后面时,表示插值,插值发生。在您的示例中,实例变量 @X@XX 被调用,我想它们没有定义。如果是这样,那么这些变量默认是 nil ,通过 to_s 扩展为空字符串进行插值。当#@不能解释为插值时(例如@是无效的实例变量名),则逐字识别为#@,并在检查时插入转义字符[=19] =]