2015-04-13 4 views
0

Мой код дает мне результат, который я хочу, но он не передает rspec. Вот мой код:Как удалить эти скобки?

def tokens(tokens) 
    tokenized = [] 
    syms = %w(*/- +) 
    tokenized << tokens.split.map{|i| syms.include?(i) ? i.to_sym : i.to_i} 
    tokenized 
    end 

здесь является соответственно:

# extra credit 
    it "tokenizes a string" do 
    calculator.tokens("1 2 3 * + 4 5 - /").should == 
     [1, 2, 3, :*, :+, 4, 5, :-, :/] 
    end 

теперь, мой код на самом деле, потому что он находится в массиве, вернитесь

[1, 2, 3, :*, :+, 4, 5, :-, :/] 

, но когда я бегу ответ не пройдет, потому что он получает на нем дополнительный набор кронштейнов: Неудачи:

1) RPNCalculator tokenizes a string                       
    Failure/Error: [1, 2, 3, :*, :+, 4, 5, :-, :/]                    
     expected: [1, 2, 3, :*, :+, 4, 5, :-, :/]                     
      got: [[1, 2, 3, :*, :+, 4, 5, :-, :/]] (using ==) 

Я полагаю, что rspec использует метод .inspect, который добавляет скобки (я точно не знаю, как работает .should). Для всех пунктов и целей мой код кажется правильным. Но это не пройдет, как есть. Что мне делать, чтобы пройти?

ответ

0

Чтобы передать ваши спецификации, вы должны изменить в tokens способе, как это.

def tokens(tokens) 
    syms = %w(*/- +) 
    tokens.split.map{|i| syms.include?(i) ? i.to_sym : i.to_i} 
end 
+0

AH да! карта меняет массив на месте! не нужно вставлять его в новый массив ... тух! лол! благодаря – HolyMoly

1

map возвращает массив. Так что, когда вы делаете

tokenized << tokens.split.map{|i| syms.include?(i) ? i.to_sym : i.to_i} 

Вы присоединените массив в tokenized массив. Так что ваш RSpec должен быть

it "tokenizes a string" do 
    calculator.tokens("1 2 3 * + 4 5 - /").should == 
    [[1, 2, 3, :*, :+, 4, 5, :-, :/]] 
end 
+0

В качестве последнего средства я изменю rspec ... но я не уверен, что должен (я должен представить эти задания). Есть ли другой способ сделать это? Переключение на строку не работает, очевидно, и использование метода 'each' дает мне следующее:' got: [["1", "2", "3", "*", "+", "4" , "5", "-", "/"]] (используя ==) 'Yikes. Что с этим? – HolyMoly

+0

@HolyMoly Почему вы хотите добавить его на первое место? Почему бы вам не сделать это, как указано в другом ответе? –

+0

lol, он просто не «нажимал», что я делал неправильно. кажется настолько очевидным сейчас! Я исправился. спасибо Амиту! – HolyMoly

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