"base.send:include,InstanceMethods"--->这是做什么的?

fra*_*anz 11 ruby

我正在看一个模块X,它包含两个名为" InstanceMethods"和" ClassMethods"的模块.

模块X中的最后一个定义是:

  def self.included(base)
    base.send :include, InstanceMethods
    base.send :extend,  ClassMethods
  end
Run Code Online (Sandbox Code Playgroud)

这是做什么的?

toh*_*lio 10

included只要模块包含在另一个模块或类中,就会调用它.在这种情况下,它会尝试调用baseinclude方法来获取模块的方法,变量和常量从InstanceMethods加入base,然后将尝试调用baseextend方法来获得实例方法,从ClassMethods加入base.

它也可能是

def self.included( base )
  base.include( InstanceMethods )
  base.extend( ClassMethods )
end
Run Code Online (Sandbox Code Playgroud)

  • include是Method类的私有方法.因此,base.include将无效. (9认同)
  • 那就对了.http://ruby-doc.org/core/classes/Module.html#M001683上有更多信息和友好的例子 (2认同)