a = [[:a, :b, :c]]
1) ich diesen
a.each{|(x, y), z| p z} # => :b
verstehen, dass es zwei Variablen (x, y)
und z
, so dass das dritte Element :c
wird weggeworfen, und z
Streichhölzer :b
. Und ich verstehe dieses
a.each{|(x, y), z| p y} # => nil
dass (x, y)
Streichhölzer :a
, und da es kein Array ist, gibt es keine Elemente, und so y
Streichhölzer nil
.
Aber wie funktioniert
a.each{|(x, y), z| p x} # => :a
Arbeit? Ich erwarte, dass nil
zurückgegeben wird.
2) Warum sind die Rückgabewerte so?
a.each{|(x, y)| p x} #=> :a
a.each{|(x, y)| p y} #=> :b
Ich erwarte, dass sie beide zurückgeben.
Okay, also im ersten Fall findet die intelligente Zuweisung zweimal statt, und im zweiten Teil davon ergibt (x, y) =: a x =: a und y = nil. Ich hab es geschafft. – sawa
Schön. Ich benutze das die ganze Zeit, ohne zu merken, dass es mit der parallelen Zuweisung verbunden war. Ich habe auch einen Blog gefunden, der es "Destrukturierung" nennt. – Kelvin