여기 주제에 대한 좋은 기사 - Class and Instance Variables In Ruby입니다.
class A
class << self
attr_accessor :class_var
end
def set_class_var(value)
self.class.class_var = value
end
def get_class_var
self.class.class_var
end
end
class B < A; end
A.class_var = 'a'
B.class_var = 'b'
puts A.class_var # => a
puts B.class_var # => b
A.new.set_class_var 'aa'
B.new.set_class_var 'bb'
puts A.new.get_class_var # => aa
puts B.new.get_class_var # => bb
당신이 Class
클래스의 인스턴스로 약 A
을 생각해야 그것을 이해하기 위해 (그리고 루비에 어떻게입니다) :
기본적으로, 당신이 할 수있는 일은이다. 그러나 루비의 모든 개체가 개체 자체에 정의 된 방법과 같은 오브젝트 특정 물건을 저장하는 자신의 싱글 톤 클래스가 있습니다이 경우 foo
에서
a = A.new
def a.foo
puts 'foo'
end
은 a
개체에 대한 아니라 A
클래스의 모든 인스턴스에 대해 방법을 정의한다. 그리고 객체의 싱글 톤 클래스의 메소드를 정의하는 또 다른 방법은 같다 :
우리는 우리의
A
클래스의 싱글 톤 클래스의 맥락에서
class_var
속성 접근을 정의하기 위해이 방법을 사용하는 첫 번째 코드 조각에서
class << a # open a's singleton class
def bar # define method that will be available only on 'a' object
puts 'bar'
end
end
이 (가 조금 까다로운 , 그래서 그것에 대해 생각할 필요가 있습니다). 결과 클래스 자체는 class_var
변수와 그 자손 클래스 B
을가집니다. 차이점은 각자 자신의 간섭이없는 변수 인 class_var
입니다.
인스턴스 변수를 원하십니까? (예 : @@ v 대신 @v) – cvshepherd