Почему строковая интерполяция работает в 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 ответ:
по данным Язык Программирования Ruby Флэнаган и Мацумото:
если выражение, которое должно быть интерполировано в строковый литерал, является просто ссылкой на глобальную переменную, экземпляр или класс, то фигурные скобки могут быть опущены.
Так что все должно работать:
@var = "Hi" puts "#@var there!" #=> "Hi there!" @@var = "Hi" puts "#@@var there!" #=> "Hi there!" $var = "Hi" puts "#$var there!" #=> "Hi there!"