如果我正在编辑数组类,我不应该用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
定义方法时形成对比,其中 self
是Array
类。