Frage

Ich habe festgestellt, dass die geschweiften Klammern für einen Hash weggelassen werden können, wenn es sich um das letzte Element in einem Array handelt.Zum Beispiel die Formulare:

[1, 2, 3, :a => 'A', :b => 'B']
[1, 2, 3, a: 'A', b: 'B']

scheint identisch zu sein mit:

[1, 2, 3, {:a => 'A', :b => 'B'}]
[1, 2, 3, {a: 'A', b: 'B'}]

Ich wusste, dass diese Art der Auslassung für Argumente einer Methode möglich ist, hatte aber nicht bemerkt, dass dies für ein Array möglich ist.Ist mein Verständnis dieser Regel richtig?Und ist das irgendwo beschrieben?

War es hilfreich?

Lösung

Dies scheint eine neue Funktion von 1.9 zu sein:

$ rvm use 1.8.7
$ irb
ruby-1.8.7-p352 :001 > x = [ 1,2,3,:a => 4, :b => 5 ]
SyntaxError: compile error
(irb):1: syntax error, unexpected tASSOC, expecting ']'
x = [ 1,2,3,:a => 4, :b => 5 ]
                 ^
  from (irb):1
ruby-1.8.7-p352 :002 > exit
$ rvm use 1.9.3
$ irb
ruby-1.9.3-p0 :001 > x = [ 1,2,3,:a => 4, :b => 5 ]
 => [1, 2, 3, {:a=>4, :b=>5}] 
ruby-1.9.3-p0 :002 >

Andere Tipps

Ich denke, die Klammern (und keine Klammern wie unten) werden als Hash-Literale bezeichnet, und Ruby versucht nur, sie als Array-Element anzupassen.

>> [1, 2, c: 'd', e: 'f'] # ruby 1.9 hash literals
=> [1, 2, {:c=>"d", :e=>"f"}]

Aber es gibt keine weiteren Regeln, denke ich - das können Sie nicht:

>> [1, 2, c: 'd', e: 'f', 5] # syntax error, unexpected `]` (waiting for => or :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top