.self如何在Ruby中工作?

时间:2015-08-18 22:29:27

标签: ruby module self enumerable

我正在尝试重新编写可枚举的方法,仅用于练习。我不明白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引用了什么以及它在我的代码中扮演的角色。

1 个答案:

答案 0 :(得分:1)

在Ruby中,您有可以发送消息的对象。您向其发送消息的对象称为该消息的“接收者”。在对象上调用方法基本上只是将带有方法名称的消息发送到该对象。

self是一种Ruby语言结构,它指的是当前接收者的任何内容。因此,当您将Enumerable模块混合到一个类中,然后实例化该类并在其上调用#my_each时,接收器将是该类的一个实例,您可以使用关键字{{1}获取句柄。 }。