Kernel
模块的目的是什么?如果Kernel
上当前定义的所有内容都在Object
上定义,并且没有Kernel
这样的模块会发生什么变化?Kernel
还是Object
上定义?答案 0 :(得分:10)
我将从一个问题开始:self
在puts
等典型{{}}}方法中的含义是什么?与self
内部有意义的puts
最接近的可能是Ruby运行时本身。对于其他真正想成为功能的方法也是如此。例如Kernel
或Array
。因此,您可以将Kernel
看作是对Ruby本身或多或少的命令或消息的方法的倾销场所。
Kernel
也有奇怪的方法,例如fork
和sub
,这些方法实际上只适用于一次性ruby -e
脚本。这些东西倾向于使用$_
作为隐含的self
,但我认为它们可以被视为对Ruby运行时"命令的特殊情况。如上所述。
当您希望能够在任何对象上调用该方法时,方法会在哪里?我说它会进入Object
。如果该方法实际上是伪装的函数并且没有任何有意义的self
,那么它将进入Kernel
。