编辑类方法定义 self.xxx



如果我正在编辑数组类,我不应该用self定义每个方法(例如 self.sum)。我不确定为什么这通过了"测试优先"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

这些是"实例方法" - 它们对Array实例进行操作,而不是Array类本身。如果在定义每个方法的名称之前self.,则将定义一个"类方法",这对这些方法没有任何意义。

尽管不是必需的,但从另一个方法的主体中调用这些方法时,self.工作的原因是self被定义为该点的"实例"。这与使用 def 定义方法时形成对比,其中 selfArray类。

相关内容

最新更新