2016-11-23 3 views
3

Ich bin sicher, dass dies in der Regel der Fall ist, aber ich bin nicht sicher, warum es hier nicht funktioniert:Sind Klammern nicht optional, wenn ein Hash das letzte Argument ist?

Hier ist der Code

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

Und hier ist der Fehler:

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

Ich kann den Code beheben, indem ich stattdessen OpenStruct.new(key: "foo") verwende, aber ich sehe nicht, warum das notwendig ist.

Ich denke, es hat etwas mit den Array-Klammern zu tun hat, denn das funktioniert gut:

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

Antwort

5

Es wird zweideutig, wenn Sie einen anderen Schlüssel-Wert-Paar hinzu:

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

other: "bar" könnte ein anderes Array-Element sein:

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

oder ein anderes Argument:

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