理解ruby中的self.include

理解ruby中的self.include,ruby,module,Ruby,Module,如果我有 module Mod def self.included(base) some_method end def some_method end end class A include Mod end 我得到一些没有定义的方法。那么,如何在包含Mod后立即调用某个方法呢?您必须创建一个基类实例来调用它 module Mod def self.included(base) base.new.some_method end de

如果我有

module Mod
  def self.included(base)
      some_method
    end
  def some_method
  end
end

class A 
  include Mod
end
我得到一些没有定义的方法。那么,如何在包含Mod后立即调用某个方法呢?

您必须创建一个基类实例来调用它

module Mod
  def self.included(base)
      base.new.some_method
  end
  def some_method
  end
end

class A 
  include Mod
end
在包含module Mod之后,一些方法将可用作类A实例的实例方法。

您必须创建一个基类实例来调用它

module Mod
  def self.included(base)
      base.new.some_method
  end
  def some_method
  end
end

class A 
  include Mod
end
在包含模块Mod后,一些_方法将可用作类A实例的实例方法。

当模块包含在类中并且一些_方法也在类级别调用时,在类级别调用包含的方法。因此,需要找到某种_方法作为类方法。这将对self.some_方法起作用:

或者,您需要首先创建基类的实例,并在该实例上调用某些方法,如他在回答中提到的@ArupRakshit。

当模块包含在类中并且在类级别上调用某些方法时,会在类级别上调用包含的方法。因此,需要找到某种_方法作为类方法。这将对self.some_方法起作用:


或者您需要首先创建基类的实例,并在该实例上调用一些方法,如他在回答中提到的@ArupRakshit。

正如spickermann所说:当模块被包含到类中时,在类级别调用包含的方法,同样的方法:某些方法也需要在类级别上调用,因为它是从:included方法调用的,我们可以使用base.class\u eval,因为class\u eval可以用于向类添加方法

module Mod
  def self.included(base)
      base.class_eval do
        some_method
      end
    end
  def some_method
  end
end

class A 
  include Mod
end
在这里,您可以使用以下操作:some_方法


正如spickermann告诉我们的:当模块被包含到一个类中时,在类级别上调用included方法,同样的方法:一些方法也需要在类级别上调用,因为它是从:included方法调用的,我们可以使用base.class_eval,因为class_eval可以用于将方法添加到类中

module Mod
  def self.included(base)
      base.class_eval do
        some_method
      end
    end
  def some_method
  end
end

class A 
  include Mod
end
在这里,您可以使用以下操作:some_方法