在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即这个类对象本身增加他自己的方法--这就是所谓的类方法了。
分享到:
相关推荐
主要介绍了Ruby中require、load、include、extend的区别介绍,require、load用于文件,如.rb等等结尾的文件,include、load则用于包含一个文件中的模块,需要的朋友可以参考下
本文将介绍浅谈Ruby on Rails中的include和extend。include主要用来将一个模块插入到一个类或者其它模块。extend用来在一个对象中引入一个模块,这个类从而也具备了这个模块的方法。
本文主要给大家介绍了在Ruby中 module_function 和 extend self的共同点和区别,非常的详细,也很实用,方便大家更好的理解的module_function 和 extend self
implementation 'com.guo.android_extend:android-extend:1.0.6'失败,用这个替代就好了 implementation 'com.guo.android_extend:android-extend:1.0.6'失败,用这个替代就好了
解析UML用例图中include与extend的区别
ruby extend compile 需要的包。 包含 mingw 和 mysys
implementation 'com.guo.android_extend:android-extend:1.0.6'失败,用这个替代就好了
PS图片出血扩展插件-Image Extend-1.0.0中文汉化版
计算graphicLayers的extend
jQuery.extend 函数详解 Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解。
原生js实现jquery $.extend方法 通过遍历对象属性来实现
jquery.validate.extend.js
使用方式:把资源放到libs下,在gradle app 中添加 低版本:compile files('libs/android-extend-1.0.6.aar') 高版本:implementation files('libs/android-extend-1.0.6.aar')
Java中extend与implement区别.doc
EXTEND工程设计软件的基础教程 英文版本 适合初学者
EXTEND是一个很简朴但实用经济、建模效率很高、扩展性很好的仿真软件,性价比和众多技术性能指标在主流仿真软件中比较突出,深受重视实效的企业欢迎。进入中国很短时间之内,已经被英特尔、ABB、佳能、宝钢 、诺基亚...
NULL 博文链接:https://anniexuguoan.iteye.com/blog/835266
用例的关系有泛化(generalization)、扩展(extend)和包含(include)。其中include和extend最易混淆。下面我们结合实例彻底理清三者的关系。基本概念用例图(UseCaseDiagram):用例图显示谁是相关的用户,用户希望系统...