ruby中include与extend的差异
ruby中include与extend的区别在Rspec的源码中,经常可以看见这样的代码:KlassA extend ModAKlassA include
ruby中include与extend的区别
在Rspec的源码中,经常可以看见这样的代码:
KlassA extend ModAKlassA include ModB
那么include和extend究竟有什么区别的?
简而言之,引用如下:
module A def klass_method puts 'klass method' end def ins_method puts 'instance method' endendclass BendB.class_eval do include AendB.new.ins_method # 'should puts instance method'#B.klass_method # 'not define'B.class_eval do extend AendB.klass_method # 'klass method'B.ins_method # also as class method
需要注意的是,如果o.extend Mod的话,那么o将会获得Mod的方法作为其instance method,但是与o同属于1个类的对象则没有Mod的方法