가상 변수와 같은 Setter/Getter가있는 클래스 변수를 갖는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/128718

  •  02-07-2019
  •  | 
  •  

문제

루비를 내 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top