编辑类方法def self.xxx

时间:2013-09-13 21:41:24

标签: ruby rspec class-method test-first

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

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

1 个答案:

答案 0 :(得分:1)

这些是“实例方法” - 它们在Array实例上运行,而不是Array类本身。如果在定义它时将self.放在每个方法的名称之前,那么您将定义一个“类方法”,这对这些方法没有任何意义。

虽然没有必要,但self.从另一个方法的主体内调用这些方法时起作用的原因是self被定义为“实例“那时。这与使用def 定义方法的情况形成对比,其中selfArray类。