Ruby '#' + '@' 会自动多一个 '\'

steven_yue · 2015年02月26日 · 最后由 tsaikoga 回复于 2015年03月13日 · 1788 次阅读
2.1.2 :003 > "#"+ "#"
 => "##" 
2.1.2 :005 > "#"+ "*"
 => "#*" 

2.1.2 :006 > "#"+ "@"
 => "\#@" 

这里会多一个 '\' 不知道为什么。不过:

2.1.2 :018 > "##" == "\##"
 => true 
2.1.2 :019 > "#@" == "\#@"
 => true 

2.1.2 :021 > a="#@"
 => "\#@" 
2.1.2 :022 > a.length
 => 2 

但是:

2.1.2 :025 > a="#@abc"
 => "" 
2.1.2 :027 > a="\#@abc"
 => "\#@abc"

觉得很奇怪。后来查了下,才发现原因。

我们都是知道,在 " " 里面可以用 #{v} 来插入表达式或者变量,但是如果 # 后面加入的是变量,而且这个变量是以 @ 或者 $ 开头的,那么你可以省去 { } 。比如:

2.1.2 :030 > @abc = 1
 => 1 
2.1.2 :031 > "#@abc"
 => "1" 
2.1.2 :032 > "#{@abc}"
 => "1"

2.1.2 :033 > $efg = 3
 => 3 
2.1.2 :034 > "#$efg"
 => "3" 

哟,学习了。

实际新生成的字符串没有多 '\',只是 inspect 显示时多出 '\'

研究的很细...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号