Ruby的include和extend

关键字: ruby rails
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  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值