在http://janlelis.github.io/ruby-bad-parts/#19我可以看到一些奇怪的Ruby语法示例。
>> a = "Eurucamp #\n"
>> a.gsub /#$//, ''
# => "Eurucamp #"
我不是Ruby程序员,但我想知道它为什么会起作用,以及它的作用是什么?
答案 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?。