2015-06-06 17 views

risposta

9
x, (y, z) = 1, *[2, 3] 

La splat * sul lato destro si espande in linea, quindi è equivalente a:

x, (y, z) = 1, 2, 3 

L'elenco tra parentesi sul lato sinistro viene trattato come l'assegnazione annidati, quindi è equivalente a:

x = 1 
y, z = 2 

3 viene scartata, mentre z viene assegnato a nil.

+1

Buona risposta. E se 'x, (y, z), u = 1, * [2, 3]' poi 'x # => 1; y # => 2; z # => nil; u # => 3'. –

+0

Ok, quindi lo splat ha la precedenza sulle paratee e le parateie trattano i valori in esse come una singola unità –

+0

Non penso che la precedenza sia rilevante qui, poiché la parentesi e lo splat si trovano su lati opposti dell'uguaglianza. La chiave è la frase di Yu, "The splat" * 'sul lato destro ...". L'assegnazione parallela fa sì che 'x' sia uguale a' 1', '(y, z)' imposta uguale a '2' e così via, e se' (y, z) = 2', quindi 'y # => 2; z # => nil'. –