module

作者: SecondRocker | 来源:发表于2020-06-27 18:38 被阅读0次

    module(模块),主要两大功能:
    1、提供命名空间
    2、 Mix-in 扩展功能(模块混入)
    特性:
    1、不能拥有实例
    2、不能被继承

    一些用法:

    • 可以用include 混入模块内方法为实例方法,
    • 可使用self.included钩子可以实现 include时扩展 实例方法和类方法
    • 可使用module_function定义模块的方法, 就可以使用:“模块名 . 方法名”的形式调用
    • Module可以extend self 实现混入自己的方法为“类”方法
    
    module Animal
       def run
         puts 'run'
       end
    end
    
    module AnimalExt
      def run
        puts 'ext run'
      end
    
      def self.included(base) # 钩子,在被include时触发,base为include他的类
          base.extend ClassMethods #为类方法
      end
    
      module ClassMethods
        def eat
            puts 'eat'
        end
      end
    end
    class Rabbit
      include Animal #扩展实例方法
      include AnimalExt # 实例方法优先级更高
      extend Animal #扩展类方法
    end
    Rabbit.ancestors #[Rabbit, AnimalExt, Animal, Object, Kernel, BasicObject]  最后混入的在前面,查找方法时顺序查找
    Animal.eat #获得的类方法
    
    module X
      module_function
      def ha
        puts 'ha'
      end
    end
    X.ha #直接调用模块的方法
    
    module Z
      extend self
      def e
        puts 'e'
      end
    end
    Z.e  # 混入自己的方法变为“类”方法
    

    拓展
    Active::Support是rails对模块混入的一个扩展,解决依赖问题;主要解读参考:利用ActiveSupport::Concern来组织你需要include的module

    相关文章

      网友评论

          本文标题:module

          本文链接:https://www.haomeiwen.com/subject/xbqvfktx.html