1。与类的区别:
a.不能有实例
b.不能有子类
c.由module ... end定义。
2。作用主要有两个:
a.作为方法或者是常量的集合体,比如Math这个模块。
irb(main):001:0> Math.sqrt(4) => 2.0 irb(main):002:0> Math::PI => 3.14159265358979 irb(main):003:0> |
需要说明的是::操作符是用来引用模块或类的常量。
b.用来MIX-IN。
我们知道oo里面有单继承,比如java,多重继承,比如c++或者python,ruby也是单继承的,然而也能通过min-in来实现多继承,像java里的接口。所谓MIX-IN就是通过include把一个模块里的常量或方法引入到另一个模块或类里面。
Enumerable 是标准库里的mixin的一个例子,通过把它mixin到你的类里,那么如果你的each方法能返回一个对象,你也将有了sort,find等功能。
MIXIN和多重继承德区别:
- 模块不产生实例
- 模块使类层次关系保持树状,而不是网状。