중괄호가 없는데 Ruby에서 문자열 보간이 작동하는 이유는 무엇입니까? : @name = “Ned Stark” puts “Hello there,

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 모두에서 성공을 거두었습니다.

왜 이것이 작동합니까? 여기서 통역사는 무엇을하고 있습니까?



답변

Flanagan과 Matsumoto의 The Ruby Programming Language 에 따르면 :

문자열 리터럴로 보간 할 표현식이 단순히 전역, 인스턴스 또는 클래스 변수에 대한 참조 인 경우 중괄호를 생략 할 수 있습니다.

따라서 다음은 모두 작동합니다.

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

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

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