module MathMatica PI = 3.14 def self.clazz_fun puts "模块能够使用类方法" end #模块由于没法实例化因此用不了实例方法 def hello puts "模块中的实例方法" end end #模块直接调用常量 puts MathMatica::PI #模块使用类方法 puts MathMatica.clazz_fun #须要使用这个模块时候将这个模块导入进来称为Mix-in class Student attr_accessor :name, :old, :sex include MathMatica#把模块注入目标类或者模块做为实例方法 extend MathMatica#把模块注入目标类或者模块做为类方法 class << self def clazz_fun2 puts "Student类中的类方法" end end def initialize(name, old, sex) @name = name @old = old @sex = sex end def say_hi puts "类的实例方法" hello#类中使用include导入能够使用模块的实例方法 self.hello # self.clazz_fun2 # clazz_fun2 实例方法中不能调用类方法 end end Student.clazz_fun2 #类能够调用类方法 Student.hello puts Student::PI #类能够使用模块中的常量 # Student.clazz_fun # Student.say_hi#实例不能调用类方法 s = Student.new("huge", 20, "女") s.say_hi s.hello # s.clazz_fun2 Obj不能调用类方法
1 模块是类Class的父类。code
2 模块是不能够被new的,也就是说模块不能被实例化,因此模块是没有实例方法的。it
3 模块能够直接调用本身的类方法和本身的常量class
4 若是一个类须要使用模块的时候能够经过include和extend导入,此过程称之为Mix-inmodule
5 include和extend的区别,使用include导入模块时模块中的类方法能够在类中被看成实例方法,sso
使用extend导入模块,模块中的类方法在被导入的类中也被看成是类方法。方法
6 被导入模块中的类能够使用模块的常量和方法(方法以实例方法来使用仍是以类方法来使用取决于导入时使用用include仍是用extend导入)注入
7 类不能使用实例方法,Obj不能使用类方法co