Ruby中的奇怪//语法

时间:2014-01-24 20:17:28

标签: ruby syntax

http://janlelis.github.io/ruby-bad-parts/#19我可以看到一些奇怪的Ruby语法示例。

>> a = "Eurucamp #\n"
>> a.gsub /#$//, ''
# => "Eurucamp #"

我不是Ruby程序员,但我想知道它为什么会起作用,以及它的作用是什么?

1 个答案:

答案 0 :(得分:3)

由于$/全局变量在Ruby中意味着\n

2.0.0-p0 :001 > a = "Eurucamp #\n"
 => "Eurucamp #\n" 
2.0.0-p0 :002 > a.gsub /#$//, ''
 => "Eurucamp #" 
2.0.0-p0 :003 > $/
 => "\n" 
2.0.0-p0 :004 > /#$//.source
 => "\n" 
2.0.0-p0 :005 > a.gsub /##$//, ''
 => "Eurucamp " 
2.0.0-p0 :006 > /##$//.source
 => "#\n" 

在Regexp模板中,您告诉Stirng#gsub方法,如果找到"\n",则在源字符串中,将其替换为空字符串('')。使用Regexp#source,您将始终返回模式的原始字符串,因此我确实使用了/#$//.source,并发现它是'\n'

/#$//
 ^^^ <~~~ string interpolation happened, which is a shortcut of #{$\}

点击 @rampion 评论此帖子Why does this string interpolation work in Ruby?