나가 원래 포스트 최종 답변을하지 않았다. I 재 러스 올센 (Russ Olsen)의 책 "Eloquent Ruby"를 천천히 읽으므로 여기에 나의 테이크 아웃을 추가하기로 결정했습니다.
첫 번째 예제가 단일 @ 변수를 정의하는 범위는 클래스 범위입니다. 즉, 키워드 자체이 메소드 정의 외부에 나타나지만 여전히 클래스 정의 내에 나타나면 객체를 참조합니다 Document, Class 클래스의 인스턴스입니다.
첫 번째 예는 클래스 인스턴스 변수를 정의합니다. 즉, @default_font 변수는 클래스 객체 인 객체 Document의 인스턴스 변수입니다.
class Document
@default_font = :Arial # this is a class instance variable,
# def self.default_font
# @default_font
# end
#
# def self.default_font=(font)
# @default_font = font
# end
# or replace the above two class methods with the following
class << self
attr_accessor :default_font
end
end
:
이 클래스의 인스턴스 변수는 클래스 수준의 접근 방법,는 예를 들어, 오히려 말보다 Document.default_font, an_instance_of_Document.default_font
그래서 당신이 attr_accessors 정의하는 경우를 통해 액세스 할 수 있어야
IRB는 몇 가지의 출력 :
1.9.3p429 :002 > require './document.rb'
=> true
1.9.3p429 :004 > Document.default_font
=> :Arial
1.9.3p429 :005 > Document.default_font = :Times
=> :Times
1.9.3p429 :006 > Document.default_font
=> :Times
1.9.3p429 :007 > doc = Document.new
=> #<Document:0x007fe6730d8228>
1.9.3p429 :008 > doc.default_font
NoMethodError: undefined method `default_font' for #<Document:0x007fe6730d8228>
사실이 두 번째 예에서 원본 게시물에는 메소드 정의 외부에 단일 @ 변수 정의가 포함되어 있지 않습니다. @default_font는 인스턴스 변수이며 Document 클래스의 인스턴스화 된 객체에서만 참조 할 수 있습니다.
1.9.3p429 :001 > require './document.rb'
=> true
1.9.3p429 :002 > Document.default_font
NoMethodError: undefined method `default_font' for Document:Class
1.9.3p429 :003 > doc = Document.new
=> #<Document:0x007ffbf1136f88>
1.9.3p429 :004 > doc.default_font
=> nil
1.9.3p429 :005 > doc.default_font = :Arial
=> :Arial
1.9.3p429 :006 > doc.default_font
=> :Arial
그래서 그들 사이의 차이점은 무엇입니까 :
다음은 몇 가지 IRB 출력입니까? –