describe Array do
describe "#sum" do
it "has a #sum method" do
expect([]).to respond_to(:sum)
end
it "should be 0 for an empty array" do
expect([].sum).to eq(0)
end
it "should add all of the elements" do
expect([1,2,4].sum).to eq(7)
end
end
end
上面的代码是给我的测试代码。我将下面的代码用测试代码进行测试。
class Array
def initialize(arr)
@arr = arr
end
def sum
if @arr == nil
return 0
else
numArr = @arr
total = 0
numArr.each {|num|
total += num
}
return total
end
end
end
我认为它将返回总数7.(1 + 2 + 4 = 7)但它返回0 ...我猜它不会将[1,2,4]数组作为参数。我做错了什么?
答案 0 :(得分:1)
由于现有的数组类已经有一个初始化程序,并且数组实例中的self已经是一个数组,因此您不需要添加自己的初始化程序
class Array
def sum
self.inject(0){|sum,x| sum + x }
end
end
应该做你想做的事。 Lookup注入它是否清除,但它与您尝试使用代码完全相同,只是您使用局部变量来存储总和。
如果这不仅仅是一个实验,我建议不要在核心类上做猴子补丁(如果可以避免)(通常可以避免)。这篇文章提供了一些提示,如果不能避免的话,如何做得更清洁:http://www.justinweiss.com/articles/3-ways-to-monkey-patch-without-making-a-mess/