有没有一种方法可以像虚拟变量一样使用带有setter / getter的类变量?
时间:2020-03-06 14:40:43 来源:igfitidea点击:
我将Ruby嵌入到我的C项目中,并希望加载几个文件,这些文件定义了从我自己的父类继承的类。每个继承的类都需要在初始化时设置一些变量,而我不想为Ruby和C使用两个不同的变量。
有没有一种方法来定义具有自己的自定义设置器/获取器的类变量,或者这是处理它的愚蠢方法?也许使用自定义数据类型会更好?
解决方案
我不确定我们要问的是什么。当然,类变量可以具有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