`

ruby 元编程 类的真相

 
阅读更多

看如下的代码

class D
 def my_methond
   @v = 'demo'
 end
end

d = D.new
puts d.class
puts d.instance_variables #puts nothing

d.my_methond
puts d.instance_variables #puts @v

 让我们思考对象中有什么?

 在调用  my_methond之前,实例里什么都没有,在调用my_methond之后,实例里有了实例变量。

所以,在ruby中,对象的类和他的实例变量没有任何关系,当给实例变量赋值的时候,他们就生成。因此对于同一个类,你可以创建具有不同实例变量的对象。你可以把ruby中的实例变量理解为哈希表中的键值,每一个对象的键值都可能不同。

我们觉得对象中还有方法,实际上对象中并没有方法。在对象的内部仅仅包含了赋值的实例变量和对自身类的引用。实例方法真正存在的地方在类中。这也就是为什么同一个类的对象共享同样的方法而不共享同样的实例变量。

 

总结:一个对象的实例变量存在于对象的自身,而一个对象的方法存在于对象自身的类。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics