Ruby方法没有获取数组参数

时间:2017-03-07 19:43:11

标签: ruby rspec parameters

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]数组作为参数。我做错了什么?

1 个答案:

答案 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/