如何删除这些括号?

时间:2015-04-13 05:54:55

标签: ruby rspec

我的代码给了我想要的结果,但它没有通过rspec。这是我的代码:

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

这里是respec:

# 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, :-, :/]

但是当我运行respec时它不会通过,因为它上面有一组额外的括号,如下所示: 失败:

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是如何工作的)。对于所有观点和目的,我的代码似乎是正确的但它不会按原样通过。我该怎么做才能通过?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要传递您的规范,您必须更改tokens这样的方法。

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