如果我有一个使用attr_accessor
的类,它默认会创建一个与相应getter和setter对应的实例变量。但是除了创建实例变量之外,是否有方法可以让它创建类变量或类实例变量呢?
如果我有一个使用attr_accessor
的类,它默认会创建一个与相应getter和setter对应的实例变量。但是除了创建实例变量之外,是否有方法可以让它创建类变量或类实例变量呢?
class TYourClass
class << self
attr_accessor :class_instance_variable
end
end
您可以将其视为打开类的元类(其中类本身是一个实例)并向其添加属性。
attr_accessor是Class类的方法,它向类中添加了两个方法,一个用于读取实例变量,另一个用于设置实例变量。以下是可能的实现方式:class Class
def my_attr_accessor(name)
define_method name do
instance_variable_get "@#{name}"
end
define_method "#{name}=" do |new_val|
instance_variable_set "@#{name}", new_val
end
end
end
完全未经测试的类属性访问器:
class Class
def class_attr_accessor(name)
define_method name do
class_variable_get "@@#{name}"
end
define_method "#{name}=" do |new_val|
class_variable_set "@@#{name}", new_val
end
end
end
require 'active_support'
的地方),你可以使用cattr_accessor :name
来访问类变量。cattr_accessor
函数也有其使用场景。在APIdock的cattr_accessor
页面上有一些有用的讨论,可以澄清何时应该选择哪一个,同时也提供了cattr_accessor
、cattr_reader
和cattr_writer
函数的源码。