Ruby - 数组方法混淆

fre*_*ght 7 ruby language-design

我们可以像这样在顶层调用Array方法

Array(something)
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,它是一个没有显式接收器的方法调用,而self,在这种情况下是主要的,插入在方法调用的前面.但这不等于:

Kernel.Array(something)
Run Code Online (Sandbox Code Playgroud)

这对我没有意义.由于在第一种情况下,对象main是Object类,它将Kernel模块混入,因此具有Array方法.但在第二种情况下,我们在内核模块对象本身上调用Array方法,而不是主对象,它们不是不一样吗?

对不起,我的英语不好.

hor*_*guy 4

Kernel.Array 就是所谓的模块函数。模块函数的其他示例包括 Math.sin 和 Math.hypot 等。

模块函数是一种方法,它既是模块上的类方法,也是私有实例方法。当您在顶层调用 Array() 时,您将其作为主对象的私有实例方法进行调用。当您通过 Kernel.Array() 调用它时,您将其作为 Kernel 上的类方法进行调用。它们是相同的方法。

要了解更多信息,请阅读 ruby​​docs 中的 module_function 方法:http://www.ruby-doc.org/core/classes/Module.html#M001642