当哈希是最后一个参数时,括号不应该是可选的吗?

时间:2016-11-23 22:52:25

标签: ruby parsing syntax

我确信通常会这样,但我不确定为什么它不能在这里工作:

这是代码

  let(:stubbed_object_list) { [OpenStruct.new key: "foo"] }

这是错误:

SyntaxError: ...filepath...: syntax error, unexpected tLABEL, expecting ']'

我可以使用OpenStruct.new(key: "foo")修改代码,但我不明白为什么这是必要的。

我认为它与数组括号有关,因为这样可以正常工作:

  let(:stubbed_object_list) { OpenStruct.new key: "foo" }

1 个答案:

答案 0 :(得分:5)

如果添加另一个键值对,则会变得不明确:

[OpenStruct.new key: "foo", other: "bar"]

other: "bar"可能是另一个数组元素:

[OpenStruct.new(key: "foo"), other: "bar"]
#=> [#<OpenStruct key="foo">, {:other=>"bar"}]

或其他论点:

[OpenStruct.new(key: "foo", other: "bar")]
#=> [#<OpenStruct key="foo", other="bar">]