如何删除这些括号?

How do I remove these brackets?

我的代码给出了我想要的结果,但没有通过 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

现在,我的代码确实如此,因为它在一个数组中,return

[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 是如何工作的)。对于所有要点和目的,我的代码似乎都是正确的。但它不会像现在这样过去。我应该怎么做才能让它通过?

map returns 一个数组。所以当你这样做时

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

要通过您的规范,您必须像这样更改 tokens 方法。

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