2008-09-24 4 views
2

내 C 프로젝트에 Ruby를 임베드 할 때 자신의 부모 클래스에서 상속 된 클래스를 정의하는 여러 파일을로드하려고합니다. 상속 된 각 클래스는 초기화시 일부 변수를 설정해야하며 Ruby와 C에 대해 두 가지 다른 변수를 갖고 싶지 않습니다.setter/getter를 사용하여 클래스 변수를 가상 변수처럼 사용할 수 있습니까?

고유 한 사용자 정의 setter/getter를 가진 클래스 변수를 정의하는 방법이 있습니까? 그것을 처리하는 어리석은 방법? 어쩌면 사용자 지정 데이터 형식을 사용하는 것이 더 좋을까요?

+0

Ruby를 C에 포함시키는 것은 무엇을 의미합니까? Ruby에 익숙하지 않지만 문제를 명확히하면 도움을 줄 수 있습니다. –

+0

Ruby-C-API를 사용하여 Ruby를 통합하고 스크립팅 언어로 사용합니다. 내 질문에 더 많은 루비 관련 C.;) – unexist

답변

5

나는 당신이 무엇을 요구하고 있는지 확실하지 않습니다. 물론 클래스 변수는 getter와 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 

, 당신은 attr_accessor 방법과 유사한 class_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 
+0

답장을 보내 주셔서 감사합니다. 사실 루비에서만이 방법을 알고 있습니다. 문제는 setter/getter를 제공하고 클래스 인스턴스 당 C 변수에 물건을 저장하는 것입니다. 나는 C로 값을 필요로하고 루비와 C 사이에서 그것을 반복해서 복사하고 싶지 않다. – unexist

+0

실제로 op에 응답했는지는 확실하지 않지만 좋은 예입니다. – CantGetANick

관련 문제