Ruby 的 attr_accessor 如何生成类变量或类实例变量而不是实例变量?
如果我有一个带有 attr_accessor 的类,它默认会创建一个实例变量以及相应的 getter 和 setter。 但有没有办法让它创建一个类变量或类实例变量,而不是创建一个实例变量呢?
If I have a class with an attr_accessor
, it defaults to creating an instance variable along with the corresponding getters and setters. But instead of creating an instance variable, is there a way to get it to create a class variable or a class instance variable instead?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
像这样:
您可以将其视为打开类的元类(类本身是其实例)并向其添加属性。
attr_accessor
是类Class
的一个方法,它向该类添加了两个方法,一个用于读取实例变量,另一个用于设置实例变量。 这是一个可能的实现:完全未经测试的类属性访问器:
Like this:
You can look at this as opening the metaclass of the class (of which the class itself is an instance) and adding an attribute to it.
attr_accessor
is a method of classClass
, it adds two methods to the class, one which reads the instance variable, and other that sets it. Here's a possible implementation:Completely untested class attribute accessor:
在 Rails 中(或任何
需要 'active_support'
的地方),您可以使用cattr_accessor :name
来获取真正的类变量访问器。其他人指出的类实例变量通常更有用。 APIdock
cattr_accessor
页面有一些有用的讨论,阐明了您何时需要一个不是另一个,加上cattr_accessor
、cattr_reader
和cattr_writer
函数的源代码。In Rails, (or anywhere you do
require 'active_support'
) you can usecattr_accessor :name
to get the true class variable accessors.The class instance variables that others have pointed out are usually more useful. The APIdock
cattr_accessor
page has some helpful discussion clarifying when you would want one not the other, plus the source to thecattr_accessor
,cattr_reader
andcattr_writer
functions.