-1

如果我正在编辑 Array 类,我不应该用 self 定义每个方法(例如self.sum)。我不确定为什么这会通过'Test-First' Ruby 轨道的 rpsec 测试,而没有紧跟 def 之后的 self.method。

class Array

  def sum
    count = 0
    self.each {|x| count += x}
    count
  end

  def square
    self.map {|x| x * x}
  end

  def square!
    self.map! {|x| x * x}
  end
end
4

1 回答 1

1

这些是“实例方法”——它们作用于 的实例Array而不是Array类本身。如果您self.在定义每个方法的名称之前放置它,您将定义一个“类方法”,这对这些方法没有任何意义。

虽然不是必需的,但从另一个方法的主体中调用self.这些方法时起作用的原因是在该点被定义为“实例”。这与使用定义方法时形成对比,类在哪里。selfdefselfArray

于 2013-09-13T22:10:03.900 回答