"内核"的目的是什么?

saw*_*awa 8 ruby oop

  1. Kernel模块的目的是什么?如果所有的事情目前定义什么会改变Kernel上被定义Object,有没有这样的模块Kernel
  2. 当我想定义一个可以在任何对象上调用的方法时,我应该在on Kernel还是on上定义它Object

mu *_*ort 10

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

Kernel也有奇怪的方法sub,chop这些方法实际上只对一次性ruby -e脚本有用.这些东西倾向于$_用作暗示,self但我认为它们可以被视为上面"Ruby运行时命令"的特殊情况.

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

  • 还有一些东西(如[Delegator](https://github.com/ruby/ruby/blob/v2_1_1/lib/delegate.rb#L43-L57))从BasicObject而不是Object下载,但随后包含Kernel .如果所有内容都绑定在Object中,这就不那么简单了. (4认同)
  • @sawa是的,但那是因为"自我"必须是某种东西.我试图说'self`在像'puts`这样的方法中并没有多大意义; 我可以说''pancakes'.send(:puts,11)`但是这不会改变`puts`的行为,因为`puts`是一个函数,它只是Kernel中的一种方法.我承认我发现这里的术语有点麻烦,但我想你知道我在做什么. (3认同)
  • mu的回答是:每当您在`Kernel`上定义一个新方法时,它都应该是`private`(因此永远不会被显式接收者调用)。 (2认同)