2013-03-20 4 views
1

예를 들어 Fog gem의 코드 스 니펫에서 dns는 인스턴스 변수가 처음에 아니지만, 그 다음 단락에서 인스턴스 변수가 될 왜사람들이 종종 Ruby가 아닌 클래스에서 인스턴스 변수를 사용하는 이유는 무엇입니까?

require 'rubygems' 
require 'fog' 

# create a connection to the service 
dns = Fog::DNS.new({ 
    :provider  => 'Zerigo', 
    :zerigo_email => ZERIGO_EMAIL, 
    :zerigo_token => ZERIGO_TOKEN 
}) 


zone = @dns.zones.create(
    :domain => 'example.com', 
    :email => '[email protected]' 
) 

? 왜 zone이 인스턴스 변수가 아닌가?

답변

1

일반적으로 속성 판독기/기록기를 사용할 때 이는 attr_reader, attr_writer, attr_accessor과 같이 발생합니다. 이 매크로는 인스턴스 변수를 생성하고 'getter'메소드, 'setter'메소드 또는 둘 다에 대해 각각 노출합니다. 인스턴스 메소드 내에서는 인스턴스 변수에 항상 액세스 할 수 있습니다.

예제에 사용 된 특정 코드와 관련하여 dns이 표준 로컬 변수 인 것처럼 보입니다. 실제로 속성 접근자인 경우 속성 접근자가 실제로는 메소드이며 로컬 변수가 아니기 때문에

self.dns = Fog::DNS.new({... 

으로 작성해야합니다. 따라서 로컬 변수로 선언 된 후에 인스턴스 변수가 될 수 없다는 점에서 옳을 것이고 현재 샘플 코드는 실제 사용에 대한 부정확 한 표현입니다.