我正在尝试重新编写可枚举的方法,仅用于练习。我不明白self
在我的方法中是如何工作的。我知道如何使用它以及它返回的内容,但self
指的是什么?
以下是我为扩展each
方法[sic]重新编写的Enumerable
方法的示例。
module Enumerable
def my_each
return self unless block_given?
i = 0
while i < self.length
yield(self[i])
i+=1
end
end
end
如果有人能澄清self
如何运作,我会很感激。更具体地说,我想知道self.length
引用了什么以及它在我的代码中扮演的角色。
答案 0 :(得分:1)
在Ruby中,您有可以发送消息的对象。您向其发送消息的对象称为该消息的“接收者”。在对象上调用方法基本上只是将带有方法名称的消息发送到该对象。
self
是一种Ruby语言结构,它指的是当前接收者的任何内容。因此,当您将Enumerable模块混合到一个类中,然后实例化该类并在其上调用#my_each
时,接收器将是该类的一个实例,您可以使用关键字{{1}获取句柄。 }。