pez*_*ser 29 ruby instance-variables class-variables class-instance-variables
如果我有一个带有a的类attr_accessor,则默认创建一个实例变量以及相应的getter和setter.但是,有没有办法让它来创建一个类变量或类实例变量而不是创建一个实例变量?
kru*_*.ar 46
像这样:
class TYourClass
class << self
attr_accessor :class_instance_variable
end
end
Run Code Online (Sandbox Code Playgroud)
您可以将此视为打开类的元类(类本身是实例)并向其添加属性.
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
Run Code Online (Sandbox Code Playgroud)
完全未经测试的类属性访问器:
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
Run Code Online (Sandbox Code Playgroud)
小智 20
在Rails中,(或者你做的任何地方require 'active_support')你可以cattr_accessor :name用来获得真正的类变量访问器.
其他人指出的类实例变量通常更有用.该APIdock cattr_accessor页面有一些有益的讨论澄清,当你想要一个不是别的,加上源的cattr_accessor,cattr_reader和cattr_writer功能.
| 归档时间: |
|
| 查看次数: |
34507 次 |
| 最近记录: |