打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Ruby的include和extend
userphoto

2014.12.21

关注
include主要用来将一个模块插入(mix)到一个类或者其它模块。
extend 用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。
通常引用模块有以下3种情况:
1.在类定义中引入模块,使模块中的方法成为类的实例方法
这种情况是最常见的
直接 include <module name>即可

2.在类定义中引入模块,使模块中的方法成为类的类方法
这种情况也是比较常见的
直接 extend <module name>即可

3.在类定义中引入模块,既希望引入实例方法,也希望引入类方法
这个时候需要使用 include,
但是在模块中对类方法的定义有不同,定义出现在 方法
def self.included(c) ... end 中

完整的示例如下:

Java代码
  1.   
  2. module Ma   
  3.   MA_VALUE = 1  
  4.   def ma_1   
  5.     puts "it is ma_1"  
  6.   end   
  7. end   
  8.   
  9. module Mb   
  10.   MB_VALUE = 1  
  11.   def self.included(c)   
  12.     def c.mb_2   
  13.       puts "it is mb_2"  
  14.     end   
  15.   end   
  16.   def mb_1   
  17.     puts "it is mb_1"  
  18.   end   
  19. end   
  20.   
  21. class Ca   
  22.   include Ma      
  23. end   
  24.      
  25. class Cb   
  26.   extend Ma   
  27.   include Mb   
  28. end   
  29.   
  30. c1 = Ca.new  
  31. c1.ma_1   
  32.   
  33. c2 = Cb.new  
  34. c2.mb_1   
  35. Cb.ma_1   
  36. Cb.mb_2   
  37.   
  38. puts Ma::MA_VALUE   
  39. puts Ca::MA_VALUE   
  40.   
  41. puts Mb::MB_VALUE   
  42. puts Cb::MB_VALUE  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ROR之include、extend、send对module、class进行扩展
Ruby一些笔记
解析UML用例图中include与extend的区别
227 f0706
动态语言ruby、groovy、python基本语法复习1
ruby基础(三)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服