如何将mix进来的方法,变成类方法

 

 

如何将mix进来的方法,变成类方法

【例1】

 

 

module MyModule
  def a_method
    puts "hello, MyModule#a_method"
  end
end

class E
  include MyModule
end

E.new.a_method

 

 

在class中include Module的方法,module中方法会变成class的实例方法。

【例2】

 

 

 

module MyModule
  def self.a_method
    puts "hello, MyModule#a_method"
  end
end

class E
  include MyModule
end

E.new.a_method
E.a_method

 

 

模块方法被include时,既不作为类方法,也不作为实例方法。

 

【例3】

 

 

module MyModule
  def a_method
    puts "hello, MyModule#a_method"
  end
end

class E
  class << self
    include MyModule
  end
end

E.a_method 
#=> hello, MyModule#a_method

 这种方法是将 Module中的方法引入到类E的eigenclass中,关于eigenclass有些复杂,大概意思是,在方法调用时,先去类对应的eigenclass中查找(每个类都有一个对应的eigenclass),如果没有则再到父类中查找。

 

 

【例4】

 

 

module MyModule
  def a_method
    puts "hello, MyModule#a_method"
  end
end

obj = Object.new
obj.extend(MyModule)
obj.a_method

class E
  extend MyModule
end

E.a_method

#=> hello, MyModule#a_method
#=> hello, MyModule#a_method

 

extend方法,实际上也是将Module方法加入到类的eigenclass中

 

你可能感兴趣的:(extend,include,eigenclass)