ruby,内核模块方法文档
ruby, kernel module methods documentation
Ruby Kernel module 文档中的这件事让我很困惑。
据我所知,内核模块包含在 class 对象中。
这样做会使它的所有实例方法成为 Object 的方法,因此,任何其他 class 的方法也是如此。
到目前为止,一切都很好;然后文档指出:
The Kernel instance methods are documented in class Object while the module methods are documented here
好的。但话又说回来,所有方法都属于以下部分:
Public Instance Methods
像sprintf
、lambda
、load
、loop
这样的方法在我看来显然是class类方法,而不是实例方法,甚至如果他们是 "called without receiver"。
但这是不正确的,因为将它们呈现为实例方法具有一定的一致性;在左侧的方法框中,它们使用 'instance method convention' 调用,即 #some_method。
那么这是为什么呢?它们是实例还是其他什么?如果它们是实例方法,它们与哪个实例相关?
classObject
本身就是一个对象。当Kernel
被包含在Object中时,它的实例方法成为Object
的实例方法,同时也是对象的实例方法Object
(a.k.a classObject的方法).是的,这意味着对象 Object
在其 class 的祖先链中有 Object
。
Object.class.ancestors
# => [Class, 模块、对象、内核、基本对象]
Ruby Kernel module 文档中的这件事让我很困惑。
据我所知,内核模块包含在 class 对象中。
这样做会使它的所有实例方法成为 Object 的方法,因此,任何其他 class 的方法也是如此。
到目前为止,一切都很好;然后文档指出:
The Kernel instance methods are documented in class Object while the module methods are documented here
好的。但话又说回来,所有方法都属于以下部分:
Public Instance Methods
像sprintf
、lambda
、load
、loop
这样的方法在我看来显然是class类方法,而不是实例方法,甚至如果他们是 "called without receiver"。
但这是不正确的,因为将它们呈现为实例方法具有一定的一致性;在左侧的方法框中,它们使用 'instance method convention' 调用,即 #some_method。
那么这是为什么呢?它们是实例还是其他什么?如果它们是实例方法,它们与哪个实例相关?
classObject
本身就是一个对象。当Kernel
被包含在Object中时,它的实例方法成为Object
的实例方法,同时也是对象的实例方法Object
(a.k.a classObject的方法).是的,这意味着对象 Object
在其 class 的祖先链中有 Object
。
Object.class.ancestors
# => [Class, 模块、对象、内核、基本对象]