如果我正在编辑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
答案 0 :(得分:1)
这些是“实例方法” - 它们在Array
的实例上运行,而不是Array
类本身。如果在定义它时将self.
放在每个方法的名称之前,那么您将定义一个“类方法”,这对这些方法没有任何意义。
虽然没有必要,但self.
在从另一个方法的主体内调用这些方法时起作用的原因是self
被定义为“实例“那时。这与使用def
定义方法的情况形成对比,其中self
是Array
类。