似乎当@
符号与#
符号配对时,会忽略某些字符。它甚至在%{}
分隔符内执行此操作。这是怎么回事?
"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#"
#=> "#"
答案 0 :(得分:3)
@
是Ruby中实例变量的一个符号,当它跟随#
时,表示插值,插值发生。在您的示例中,调用实例变量@X
和@XX
,我认为这些变量未定义。如果是这样,那么这些变量默认为nil
,它会扩展为to_s
的空字符串以进行插值。如果#@
无法解释为插值(例如@
是无效的实例变量名称),则会将其#@
逐字识别,并在检查中插入转义字符。