如果我有一个带有a的类attr_accessor,则默认创建一个实例变量以及相应的getter和setter.但是,有没有办法让它来创建一个类变量或类实例变量而不是创建一个实例变量?
ruby instance-variables class-variables class-instance-variables
所以这出现在我的脑海里,想知道下面的一些事情发生时会发生什么.
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.当时只有我能看到这两种方法John和John=.这是怎么发生的?为什么运行类方法会动态地向已创建的对象添加方法?有人可以解释一下这个.
代码的输出是:
before calling class method abc: []
after calling class method abc: [:John, :John=]
Run Code Online (Sandbox Code Playgroud)