Почему интерполяция строк работает в Ruby, когда нет фигурных скобок?
Правильный способ использования интерполяции строк в 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.
Почему это работает? Что здесь делает интерпретатор?
Ответы
Ответ 1
Согласно языку программирования Ruby от Flanagan и Matsumoto:
Когда выражение, которое должно быть интерполировано в строковый литерал, является просто ссылкой на глобальную переменную экземпляра или класса, то фигурные скобки могут быть опущены.
Итак, все должно работать:
@var = "Hi"
puts "#@var there!" #=> "Hi there!"
@@var = "Hi"
puts "#@@var there!" #=> "Hi there!"
$var = "Hi"
puts "#$var there!" #=> "Hi there!"