我将 Ruby 嵌入到我的 C 项目中,并希望加载几个文件,这些文件定义了从我自己的父类继承的类。每个继承的类都需要在初始化时设置一些变量,我不想为 Ruby 和 C 设置两个不同的变量。
有没有办法定义一个具有自己的自定义 setter/getter 的类变量,或者这是一种愚蠢的处理方式?也许使用自定义数据类型会更好?
我不确定你在问什么。当然,类变量可以有 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