码迷,mamicode.com
首页 > 其他好文 > 详细

(转)Ruby的include和extend

时间:2015-01-09 18:58:17      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

完整的示例如下:

 1 module Ma   
 2   MA_VALUE = 1  
 3   def ma_1   
 4     puts "it is ma_1"  
 5   end   
 6 end   
 7   
 8 module Mb   
 9   MB_VALUE = 1  
10   def self.included(c)   
11     def c.mb_2   
12       puts "it is mb_2"  
13     end   
14   end   
15   def mb_1   
16     puts "it is mb_1"  
17   end   
18 end   
19   
20 class Ca   
21   include Ma      
22 end   
23      
24 class Cb   
25   extend Ma   
26   include Mb   
27 end   
28   
29 c1 = Ca.new  
30 c1.ma_1   
31   
32 c2 = Cb.new  
33 c2.mb_1   
34 Cb.ma_1   
35 Cb.mb_2   
36   
37 puts Ma::MA_VALUE   
38 puts Ca::MA_VALUE   
39   
40 puts Mb::MB_VALUE   
41 puts Cb::MB_VALUE  

 

(转)Ruby的include和extend

标签:

原文地址:http://www.cnblogs.com/angelfan/p/4213711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!