2014-12-22 2 views
0

Я написал следующий «метод провозглашения». Он стремится взять элементы из массива и поставить «!» за.Метод прокламации не ставит "!" за каждым элементом

class ArrayModifier 
attr_accessor :userArray 
def initialize(userArray) 
    @userArray = userArray 
end 

def exclaim 
    newArray = [] 
    userArray.each do |num| 
     newArray << "#{num}!"   
    end 
    newArray 
end 

end 

Когда я запускаю его на этом массиве

a = ["Henk", "Marc"] I get 

=> ["Henk!", "Piet!"] 

, который хорошо выглядит. Я получаю сообщение об ошибке Rspec хотя

RSpec :: Ожидания :: ExpectationNotMetError

expected: "Hey! ho! let's! go!" 
got: "Hey! ho! let's! go" 

И там, кажется, не помещая '!' за последним элементом ... Любые идеи о том, откуда это происходит?

+2

могли бы вы показать нам тест? –

+1

Hahaha взгляните на [Array # collect] (http://ruby-doc.org/core-1.9.3/Array.html#method-i-collect), поскольку документация является именно вашим прецедентом. – engineersmnky

+1

Есть лучший способ выразить свой метод 'exclaim'' array.map {| element | "#{элемент}!" } '. Однако ваш код должен работать. Так происходит что-то еще. Покажите нам тест, как указано @UriAgassi. – Mohamad

ответ

-1

Я предполагаю, что вы разделили строку с завершающим символом новой строки на последнем 'go'. Примените String#chomp к линии перед расщеплением.

В качестве примечания, вы можете упростить метод exclaim с помощью Array#map:

def exclaim 
    userArray.map { |num| "#{num}!" } 
end 
+0

как угадать? –

+1

Даже если вход был «[« Hey »,« ho »,« let's »,« go \ n »], выход был бы« [«Привет!», «Ho!», «Let's!», go \ n! "]', а не '[" Hey! "," ho! "," let's! "," go "]' ... –

+0

@UriAgassi Кажется, он сравнивает строку, а не массив, поэтому он делает некоторую пост-обработку, о чем спрашивает Хумза. Возможно, пост-обработка каким-то образом связана с падением «!» после новой строки. Но благодарю вас за нисходящее голосование в любом случае. – Matt

Смежные вопросы