Ruby中的Each_with_index方法

时间:2015-03-29 17:02:05

标签: ruby-on-rails ruby rspec

我是ruby的新手,我现在正在学习循环。我使用each_with_index方法返回元素在新数组中的值和位置。在这里,我创建了一个方法(称为add_value_and_index),该方法通过each_with_index方法,以便在新数组中返回值和位置(new_array)

def add_value_and_index(array)
  new_array = []
  new_array = array.each_with_index do |element, index|
    p "#{element} is a position #{index}"
  end
  new_array
end

我得到" ExpectationsNotMet" RSPEC中的错误,上面的代码中缺少什么来通过测试?这是规格:

describe '#add_value_and_index' do
  it "returns a new array composed of the value + index of each element in the former" do
    expect( add_value_and_index([2,1,0]) ).to eq([2,2,2])
  end
end

我得到的错误:

RSpec::Expectations::ExpectationNotMetError

expected: [2, 2, 2]
     got: [2, 1, 0]

(compared using ==)

exercise_spec.rb:5:in `block (2 levels) in <top (required)>'

1 个答案:

答案 0 :(得分:1)

您需要对元素及其索引求和,以便通过测试:

def add_value_and_index(array)
  new_array = []
  array.each_with_index do |element, index|
    p "#{element} is a position #{index}"
    new_array << element + index
  end
  new_array
end

另一种方法是使用map

def add_value_and_index(array)
  array.map.with_index do |element, index|
    element + index
  end
end

add_value_and_index [2, 1, 0] 
# => [2, 2, 2]