“内核”的目的是什么?

  1. Kernel模块的目的是什么? 如果在Kernel上定义的所有内容都是在Object上定义的,并且没有像Kernel这样的模块,会发生什么变化?
  2. 当我想定义一个可以在任何对象上调用的方法时,我应该在KernelObject上定义它吗?

我将从一个问题开始:在一个典型的Kernel方法(例如puts会有什么样的self ? 最有意义的self内部puts可能是Ruby运行时本身。 类似于其他“真正想成为函数的方法”,如Arrayfork 。 因此,您可以将Kernel视为对Ruby本身或多或少的命令或消息的方法的倾销场所。

Kernel也有奇怪的方法,如subchop ,它们只对一次性ruby -e脚本有用。 这些东西倾向于使用$_作为隐含的self但我认为它们可以被视为上面“Ruby运行时命令”的特殊情况。

当您希望能够在任何对象上调用该方法时,方法在哪里? 我会说它会进入Object 。 如果该方法实际上是伪装的函数并且没有有意义的self ,那么它将进入Kernel