Why does string interpolation work in Ruby when there are no curly braces?

十年热恋 提交于 2019-11-26 04:45:30

问题


The proper way to use string interpolation in Ruby is as follows:

name = \"Ned Stark\"
puts \"Hello there, #{name}\" #=> \"Hello there, Ned Stark\"

That is the way I intend to always use it.

However, I\'ve noticed something odd in Ruby\'s string interpolation. I\'ve noticed that string interpolation works in Ruby without the curly braces in regards to instance variables. For example:

@name = \"Ned Stark\"
puts \"Hello there, #@name\" #=> \"Hello there, Ned Stark\"

And that trying the same thing as a non-instance variable does not work.

name = \"Ned Stark\"
puts \"Hello, there, #name\" #=> \"Hello there, #name\"

I\'ve tried this with success in both 1.9.2 and 1.8.7.

Why does this work? What is the interpreter doing here?


回答1:


According to The Ruby Programming Language by Flanagan and Matsumoto:

When the expression to be interpolated into the string literal is simply a reference to a global, instance or class variable, then the curly braces may be omitted.

So the following should all work:

@var = "Hi"
puts "#@var there!"  #=> "Hi there!"

@@var = "Hi"
puts "#@@var there!" #=> "Hi there!"

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"


来源:https://stackoverflow.com/questions/10091156/why-does-string-interpolation-work-in-ruby-when-there-are-no-curly-braces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!