ruby string-interpolation

¿Por qué la interpolación de cadenas funciona en Ruby cuando no hay llaves?



string-interpolation (1)

La forma correcta de usar la interpolación de cadenas en Ruby es la siguiente:

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

Esa es la manera en que intento usarlo siempre.

Sin embargo, noté algo extraño en la interpolación de cadenas de Ruby. Me di cuenta de que la interpolación de cadenas funciona en Ruby sin las llaves en lo que respecta a las variables de instancia. Por ejemplo:

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

Y que probar lo mismo que una variable que no es de instancia no funciona.

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

Lo he intentado con éxito tanto en 1.9.2 como en 1.8.7.

¿Por qué funciona esto? ¿Qué está haciendo el intérprete aquí?


De acuerdo con The Ruby Programming Language de Flanagan y Matsumoto:

Cuando la expresión que se va a interpolar en el literal de la cadena es simplemente una referencia a una variable global, instancia o clase, las llaves se pueden omitir.

Entonces, todo lo siguiente debería funcionar:

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