작은 레일 앱에서 작업 중이며 루비의 OOP 모델에 문제가 있습니다. 나는 다음과 같은 간단한 클래스 구조를 가지고있다.Ruby에서 클래스 인스턴스 변수 초기화
class Foo
protected
@bar = []
def self.add_bar(val)
@bar += val
end
def self.get_bar
@bar
end
end
class Baz < Foo
add_bar ["a", "b", "c"]
end
내 문제는 내가 바즈의 클래스 정의에 add_bar를 호출 할 때, @bar
이 분명히 초기화되지 않았는지, 지금과 나는 +
운영자 nil
에 사용할 수 없다는 오류가 발생합니다. add_bar
을 Foo
에 직접 호출해도이 문제가 발생하지 않습니다. 왜 그런데 어떻게 @bar
을 올바르게 초기화 할 수 있습니까?
내가 원하는 것을 분명히하기 위해이 클래스에서 기대하는 동작을 지적 할 것입니다.
Foo.add_bar ["a", "b"]
Baz.add_bar ["1", "2"]
Foo.get_bar # => ["a", "b"]
Baz.get_bar # => ["a", "b", "1", "2"]
어떻게하면됩니까?
+1 멋지게 대답했습니다 –
레일즈 2.3. *, 내가 사용해야하는 것, ActiveSupport에 class_attribute 기능을 가지고 있지 않지만, class_inheritable_accessor 내가 원하는 것을 정확하게하는 것처럼 보입니다, 그래서 지금 사용하고 있습니다. 팁 고마워. – HalloDu