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