`
gift5168xf
  • 浏览: 28270 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby中extend Mod

    博客分类:
  • ROR
阅读更多
    在ruby中一切皆对象就不用多说了,对象的方法是通过对象中的指针klass指向一个其他类,这个对象的方法就定义在这个类中。如果一个类是Object的子类,那么这个类所有实例化出的对象的方法都定义在这个类上,这些对象的klass指针也指向这个类。
    就ruby中的一个对象角度看,如果为它定义个一方法(既只有他自己才有的方法),这个对象就会创建一个虚类—metaclass,所以定义在这个对象上的方法都会建立在这个对象的klass指针指向的类上(metaclass)。
    言归正传,object.extend Mod 这样这个对象就会拥有模块中的实例方法,在上端已经阐明了,为对象构造自己的方法都会放在虚类中,所以扩展了的实例方法被放在了它的metaclass中。ok,说到这肯定大家想起了class << object中定义的方法,没错这样定义的方法与extend是没有区别的,他们都要为对象创建他们的metaclass。
    因此平时我们见过的如果在一个类中这样引用一个模块
   

class AClass
  extend AMod
end


    这里要解释下extend AMod实际是self.extend AMod,这样定义大家都知道实际是把引用了的模块的实例方法作为了这个类的类方法,原理同上,实际是为self即这个类对象本身增加他自己的方法--这就是所谓的类方法了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics