“内核”的目的是什么?

时间:2014-04-08 02:40:15

标签: ruby oop

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

1 个答案:

答案 0 :(得分:10)

我将从一个问题开始:selfputs等典型{{}}}方法中的含义是什么?与self内部有意义的puts最接近的可能是Ruby运行时本身。对于其他真正想成为功能的方法也是如此。例如KernelArray。因此,您可以将Kernel看作是对Ruby本身或多或少的命令或消息的方法的倾销场所。

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

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