가상 변수와 같은 Setter/Getter가있는 클래스 변수를 갖는 방법이 있습니까?
문제
루비를 내 C 프로젝트에 포함시키고 있으며 내 부모 클래스에서 상속 된 클래스를 정의하는 여러 파일을로드하려고합니다. 각 상속 클래스는 초기화시 일부 변수를 설정해야하며 Ruby와 C에 대해 두 가지 변수를 갖고 싶지 않습니다.
자체 사용자 정의 세터/getter가있는 클래스 변수를 정의하는 방법이 있습니까? 아니면이를 처리하는 어리석은 방법입니까? 사용자 정의 데이터 유형으로 더 좋을까요?
해결책
나는 당신이 무엇을 요구하는지 정확히 잘 모르겠습니다. 물론 클래스 변수는 getters and setter를 가질 수 있습니다 (그리고 무대 뒤에서 원하는 방식으로 값을 저장할 수 있음). 이 스 니펫이 무엇인가를 밝히는 데 도움이됩니까?
>> class TestClass
>> def self.var
>> @@var ||= nil
>> end
>> def self.var=(value)
>> @@var = value
>> end
>> end
=> nil
>>
?> TestClass::var
=> nil
>> TestClass::var = 5
=> 5
>> TestClass::var
=> 5
전체 Metaprogramming에있는 경우 Class_attr_Accessor 메소드를 attr_accessor 방법. 다음은 위 코드와 같습니다.
class Module
def class_attr_accessor(attribute_name)
class_eval <<-CODE
def self.#{attribute_name}
@@#{attribute_name} ||= nil
end
def self.#{attribute_name}=(value)
@@#{attribute_name} = value
end
CODE
end
end
class TestClass
class_attr_accessor :var
end
제휴하지 않습니다 StackOverflow