web-dev-qa-db-ja.com

なぜ中括弧がないときにRubyで文字列補間が機能するのですか?

Rubyで文字列補間を使用する適切な方法は次のとおりです。

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

それは私がいつもそれを使うつもりである方法です。

ただし、Rubyの文字列補間でoddに気づきました。文字列の補間は、インスタンス変数に関して中括弧なしでRubyで動作することに気付きました。例:

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

そして、非インスタンス変数と同じことを試みてもうまくいきません。

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

私はこれを1.9.2と1.8.7の両方で成功させて試しました。

なぜこれが機能するのですか?ここで通訳は何をしていますか?

84

The Ruby Programming Languageによると、フラナガンと松本:

文字列リテラルに補間される式が単にグローバル変数、インスタンス変数、またはクラス変数への参照である場合、中括弧は省略できます。

したがって、次のすべてが機能するはずです。

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

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

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