¿Cuál es la diferencia entre las declaraciones: (print x) y (print ‘# {I}’)?

No hay diferencia entre esas dos piezas de código, como es.

clase Foo

def to_s
“bar”
fin
fin

# Sección IRB
> x = Foo.nuevo

> pone x
bar

> pone “# {x}”
bar

En el primer caso, se llama al método to_s del objeto y se muestra en la consola. Más adelante, se llama al método to_s del objeto dentro del # {} y se concatena con el contenido de la cadena.
En este caso, dado que no hay contenido de cadena aparte de la parte # {}, no hay diferencia.

Cuando desee formatear la salida, la notación # {} es muy útil. Como ya se mencionó aquí, se llama interpolación de cadenas .
Esas dos líneas de código son similares:

pone “Hey” + user.first_name + “, ¿cómo estás?”

pone “Hola # {user.first_name}, ¿cómo estás?”

Al menos para mí, es bastante más fácil escribir, comprender y formatear código usando la interpolación de cadenas. Este tipo de interpolación es realmente bastante simple si se compara con las directivas de formato de printf en C, pero de todos modos es bastante útil.

El #{ } se llama interpolación de cadenas . Hace que el formato de cadenas y la especificación de contenidos sean más intuitivos.

minutos = 5
ugly_way = “Este es un gran fragmento de texto que me llevó” + minutes.to_s + “minutos para escribir”.
better_way = “Este es un gran fragmento de texto que me tomó menos de # {minutos} minutos para escribir”.

Más información sobre la interpolación de cadenas: https://en.wikipedia.org/wiki/St