Ruby Kernel module文档中的这件事让我感到困惑。
据我所知,内核模块包含在Object类中。
这样做会使其所有实例方法成为Object的方法,因此,任何其他类的方法。
到现在为止还挺好;那时医生说:
The Kernel instance methods are documented in class Object while the module methods are documented here
确定。但话说回来,所有方法都属于以下部分:
Public Instance Methods
像sprintf
,lambda
,load
,loop
这样的方法在我看来显然是类似于类的方法,而不是实例方法,即使它们是“没有调用”接收器”。
但这不可能是正确的,因为将它们作为实例方法呈现有一定的一致性;在左边的方法框中,用“实例方法约定”调用它们,即#some_method。
那么为什么呢?他们是实例还是其他什么?如果它们是实例方法,它们与哪个实例相关?
答案 0 :(得分:1)
类Object
本身就是一个对象。当Object中包含Kernel
时,其实例方法成为Object
的实例方法,但也成为对象Object
的实例方法(对象的a.k.a类方法)。是的,这意味着对象Object
在其班级中有Object
'祖先链。
Object.class.ancestors
#=> [类,模块,对象,内核,BasicObject]