Почему строковая интерполяция работает в Ruby, когда нет фигурных скобок?


правильный способ использования Строковой интерполяции в Ruby выглядит следующим образом:

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

именно так я намерен всегда его использовать.

однако, я заметил кое-что странно в Строковой интерполяции Рубина. Я заметил, что строковая интерполяция работает в 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.

почему это работает? Что здесь делает переводчик?

1 74

1 ответ:

по данным Язык Программирования Ruby Флэнаган и Мацумото:

если выражение, которое должно быть интерполировано в строковый литерал, является просто ссылкой на глобальную переменную, экземпляр или класс, то фигурные скобки могут быть опущены.

Так что все должно работать:

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

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

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