当前位置:  开发笔记 > 后端 > 正文

Ruby的attr_accessor如何生成类变量或类实例变量而不是实例变量?

如何解决《Ruby的attr_accessor如何生成类变量或类实例变量而不是实例变量?》经验,为你挑选了2个好方法。

如果我有一个带有a的类attr_accessor,则默认创建一个实例变量以及相应的getter和setter.但是,有没有办法让它来创建一个类变量或类实例变量而不是创建一个实例变量?



1> krusty.ar..:

像这样:

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



2> 小智..:

在Rails中,(或者你做的任何地方require 'active_support')你可以cattr_accessor :name用来获得真正的类变量访问器.

其他人指出的类实例变量通常更有用.该APIdock cattr_accessor页面有一些有益的讨论澄清,当你想要一个不是别的,加上源的cattr_accessor,cattr_readercattr_writer功能.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有