ruby内核:方法的行为类似于实例方法

ruby内核:方法的行为类似于实例方法,ruby,module,kernel,core,Ruby,Module,Kernel,Core,现在可以从模块内核打印方法 class C def aaa print "aaa" end end C.new.aaa # => "aaa" 这意味着,该方法定义为类方法 内核没有实例方法打印 Kernel.methods.grep /^print/ # => [:printf, :print] 所以第一个问题是:这个类方法怎么可能从对象接收器调用?(C.新的) 我还尝试用自己的模块执行相同的技巧: Kernel.instance_methods.grep

现在可以从模块内核打印方法

class C
  def aaa
     print "aaa"
  end
end

C.new.aaa
# => "aaa"
这意味着,该方法定义为类方法

内核没有实例方法打印

Kernel.methods.grep /^print/
# => [:printf, :print]
所以第一个问题是:这个类方法怎么可能从对象接收器调用?(C.新的)


我还尝试用自己的模块执行相同的技巧:

Kernel.instance_methods.grep /^print/
# => []
你看,这也是内核模块

但层次结构树是:

module M
  def self.print
    "111"
  end
end

class C
include M
  def aaa
     print 
  end
end

C.new.aaa
# => nil
方法在内核中定义为。我只能作为实例方法重写

C.ancestors
# => [C, M, Object, Kernel, BasicObject]

M.methods.grep /^print/
# => [:print]
那么内核如何做到这一点呢?内核如何将类方法作为实例方法

module M
  def print
    "111"
  end
end


M.instance_methods.grep /^print/
# => [:print]

instance\u方法
仅提供公共实例方法的列表。由于
内核
包含在
对象
中,因此其私有实例方法始终可用,因此无需公开。

噢,非常感谢!我不知道,私有方法不会与实例方法一起显示。
1.9.3-p327 :002 > Kernel.private_instance_methods.grep /^print/
=> [:printf, :print]