一句话概括,就是
class可以实例化module不可以
别的都一样
关于继承的一点区别
class是使用
module的应用场景
作为namespace,里面放一般的const或者自己的class作为工具模块,放通用方法,别的类里面直接include或者extend以后使用,也可以看成动态扩展业务类 可以作为抽象类,module里面提供默认实现,业务类include或者extend以后覆盖 作为接口来用,一个可用的接口库,
抽象类的例子
module MyAbstract def walk puts 'abstract walk' end def run puts 'abstract run' endendclass Person include MyAbstract def run puts 'person run' endenda = Person.newa.runa.walk
接口的例子
require 'module/interface'module Runnable def walk end def run endendclass Person include Runnable extend Module::Interface interface Runnable do def run puts 'run' end def walk puts 'walk' end endenda = Person.newa.runa.walk