字符串中的`@`符号会导致意外结果

时间:2015-01-30 15:56:04

标签: ruby string-interpolation

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

"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#"
#=> "#"

1 个答案:

答案 0 :(得分:3)

@是Ruby中实例变量的一个符号,当它跟随#时,表示插值,插值发生。在您的示例中,调用实例变量@X@XX,我认为这些变量未定义。如果是这样,那么这些变量默认为nil,它会扩展为to_s的空字符串以进行插值。如果#@无法解释为插值(例如@是无效的实例变量名称),则会将其#@逐字识别,并在检查中插入转义字符。