94

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

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

それが私がいつも使っている方法です。

しかし、 Rubyの文字列補間に何か奇妙なことに気づきました。文字列補間は、インスタンス変数に関して中括弧なしで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の両方で成功させて試しました。

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

4

1 に答える 1

110

FlanaganとMatsumotoによるRubyプログラミング言語によると:

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

したがって、以下はすべて機能するはずです。

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

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

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"
于 2012-04-10T15:35:45.870 に答える