Biorącnawiasach zmiennych pakietowych
a = [[:a, :b, :c]]
1) Rozumiem to
a.each{|(x, y), z| p z} # => :b
że istnieją dwie zmienne (x, y)
i z
, więc trzeci element :c
jest wyrzucane, a z
mecze :b
. I rozumiem to
a.each{|(x, y), z| p y} # => nil
że (x, y)
mecze :a
, a ponieważ nie jest tablicą, nie istnieją żadne elementy do niego, i tak y
mecze nil
.
Ale jak
a.each{|(x, y), z| p x} # => :a
pracę? Spodziewam się, że zostanie zwrócone nil
.
2) Dlaczego wartości zwracane są w ten sposób?
a.each{|(x, y)| p x} #=> :a
a.each{|(x, y)| p y} #=> :b
Spodziewam się, że zarówno zwrócą nil
.
OK, więc w pierwszym przypadku inteligentne przyporządkowanie ma miejsce dwa razy, a w drugiej jego części (x, y) =: a wynikiem jest x =: a i y = zero. Mam to. – sawa
Nice. Używam go cały czas, nie zdając sobie sprawy, że był on związany z równoległym przypisaniem. Znalazłem też bloga, który nazywa to "destructuring". – Kelvin