Ruby を C プロジェクトに埋め込んでおり、自分の親クラスから継承したクラスを定義するいくつかのファイルをロードしたいと考えています。継承された各クラスは、初期化時にいくつかの変数を設定する必要があり、Ruby と C に 2 つの異なる変数を設定したくありません。
独自のカスタム セッター/ゲッターを持つクラス変数を定義する方法はありますか、それともこれを処理する愚かな方法ですか? カスタムデータ型の方が良いでしょうか?
あなたが何を求めているのか正確にはわかりません。もちろん、クラス変数にはゲッターとセッターを含めることができます(そして、舞台裏では、好きな方法で値を格納できます)。このスニペットは何かを照らすのに役立ちますか?
>> 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