• (转)Ruby的include和extend


    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  
  • 相关阅读:
    HDU 1175 连连看 (DFS+剪枝)
    CF702F T-Shirts
    UVA12538 Version Controlled IDE
    P2605 [ZJOI2010]基站选址
    P3835 【模板】可持久化平衡树
    CF915E Physical Education Lessons
    P3701 「伪模板」主席树
    P1198 [JSOI2008]最大数
    P3466 [POI2008]KLO-Building blocks
    P3919 【模板】可持久化数组(可持久化线段树/平衡树)
  • 原文地址:https://www.cnblogs.com/angelfan/p/4213711.html
Copyright © 2020-2023  润新知