zoukankan      html  css  js  c++  java
  • ruby里面module和class的区别

    一句话概括,就是

    class可以实例化
    module不可以

    别的都一样

    关于继承的一点区别

    class是使用<作为继承的关键字,只支持单继承
    module是使用include来做实例继承(实例化的时候动态功能插入),extend做类继承(可以理解为static继承)

    module的应用场景

    作为namespace,里面放一般的const或者自己的class
    作为工具模块,放通用方法,别的类里面直接include或者extend以后使用,也可以看成动态扩展业务类
    可以作为抽象类,module里面提供默认实现,业务类include或者extend以后覆盖
    作为接口来用,一个可用的接口库,module-interface

    抽象类的例子

    module MyAbstract
      def walk
        puts 'abstract walk'
      end
    
      def run
        puts 'abstract run'
      end
    end
    
    class Person
      include MyAbstract
    
        def run
          puts 'person run'
        end
    
    end
    
    a = Person.new
    a.run
    a.walk

    接口的例子

    require 'module/interface'
    
    module Runnable
      def walk
      end
    
      def run
      end
    end
    
    class Person
      include Runnable
      extend Module::Interface
    
      interface Runnable do
        def run
          puts 'run'
        end
    
        def walk
          puts 'walk'
        end
      end
    
    end
    
    a = Person.new
    a.run
    a.walk
  • 相关阅读:
    MYSQL数据损坏修复方法
    MYSQL数据损坏修复方法
    MYSQL 定时自动执行任务
    MYSQL 定时自动执行任务
    MYSQL 定时自动执行任务
    NLog日志框架使用探究
    NLog日志框架使用探究
    SPFA算法 O(kE)
    codevs 1077 多源最短路
    code vs 2602 最短路径问题
  • 原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/4621257.html
Copyright © 2011-2022 走看看