`

关于extend和include

    博客分类:
  • Ruby
阅读更多
ruby 代码
  1. module Action   
  2.   def read   
  3.   end  
  4.   def write   
  5.   end  
  6. end  
首先定义了一个module,采用include和extend都可以将此module引入,module中的方法将作为实例方法。
java 代码
  1. class A   
  2.   include Action   
  3. end   
  4.   
  5. class B   
  6. end   
  7. b = B.new  
  8. b.extend Action  

此时调用A.instance_methods或者b.methods都可以看到方法确实已经被混入,但是include和extend的区别在哪儿?

extend的call必须是一个object,它mixing入的方法只在此object中有效,同一个类的其他实例中,是没有mixing的;include不同,它是一个class方法,caller是一个class,它对所有实例都是有效的,看代码:

ruby 代码
  1. a1 = A.new  
  2. a2 = A.new  
  3. a1.read #right   
  4. a2.read #right   
  5.   
  6. b1 = B.new  
  7. b1.extend Action   
  8. b2 = B.new  
  9. b1.read #right   
  10. b2.read #wrong!没有定义read这个方法  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics