首页 > 解决方案 > 我怎样才能使用这个reduce方法使用一个起点?

问题描述

我已经尝试了一段时间来克服这个问题。这是一门红宝石课程,它要求您构建一个方法:

describe 'my own reduce-like methods' do
  describe "reduce_to_total returns a running total when not given a starting point" do
    it "reduces correctly" do
      source_array = [1,2,3]
      expect(reduce_to_total(source_array)).to eq(6)
    end
  end

  describe "reduce_to_total returns a running total when given a starting point" do
    it "reduces correctly" do
      source_array = [1,2,3]
      starting_point = 100
      expect(reduce_to_total(source_array, starting_point)).to eq(106)
    end
  end

到目前为止,这是我的代码,通过了第一个测试:

def reduce_to_total(source_array, starting_point = 100)
    source_array.reduce(0) { |sum, num| sum + num}
end

但仍然得到以下错误:

Failures:

  1) my own reduce-like methods reduce_to_total returns a running total when given a starting point reduces correctly
     Failure/Error: expect(reduce_to_total(source_array, starting_point)).to eq(106)

       expected: 106
            got: 6

       (compared using ==)
     # ./spec/map_and_reduce_spec.rb:42:in `block (3 levels) in <top (required)>

感谢任何帮助/解释!谢谢

标签: rubymethodsreduce

解决方案


您需要starting_point作为reduce参数传递

def reduce_to_total(source_array, starting_point = 0)
    source_array.reduce(starting_point) { |sum, num| sum + num}
end

见下文:

[2] pry(main)> [1,2,3].reduce(0) { |sum, num| sum + num}
=> 6
[3] pry(main)> [1,2,3].reduce(100) { |sum, num| sum + num}
=> 106

推荐阅读