相关疑难解决方法(0)

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

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

ruby instance-variables class-variables class-instance-variables

29
推荐指数
2
解决办法
3万
查看次数

当attr_accessor在类方法中时会发生什么?

所以这出现在我的脑海里,想知道下面的一些事情发生时会发生什么.

 class Test 
   def self.abc
     attr_accessor :John 
   end
 end

 object = Test.new
 puts "before calling class method abc:  #{object.class.instance_methods(false)}"
 Test.abc
 puts "after calling class method abc:   #{object.class.instance_methods(false)}"
Run Code Online (Sandbox Code Playgroud)

在这里我检查的是,以这种方式创建getter和setter方法.如果是这样,那些实例方法或类方法.首先,我创建一个新对象,然后查看该对象的实例方法.在下一行之后,我运行该class方法abc然后再次检查实例的方法object.当时只有我能看到这两种方法JohnJohn=.这是怎么发生的?为什么运行类方法会动态地向已创建的对象添加方法?有人可以解释一下这个.

代码的输出是:

before calling class method abc:  []
after calling class method abc:   [:John, :John=]
Run Code Online (Sandbox Code Playgroud)

ruby attr-accessor

5
推荐指数
1
解决办法
573
查看次数