Ruby中模塊導入 以及include和extend的區別

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

相關文章
相關標籤/搜索