5
ho ottenuto questo:incarico parallelo con parentesi e splat operatore
x,(y,z)=1,*[2,3]
x # => 1
y # => 2
z # => nil
Voglio sapere perché z
ha il valore nil
.
ho ottenuto questo:incarico parallelo con parentesi e splat operatore
x,(y,z)=1,*[2,3]
x # => 1
y # => 2
z # => nil
Voglio sapere perché z
ha il valore nil
.
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
.
Buona risposta. E se 'x, (y, z), u = 1, * [2, 3]' poi 'x # => 1; y # => 2; z # => nil; u # => 3'. –
Ok, quindi lo splat ha la precedenza sulle paratee e le parateie trattano i valori in esse come una singola unità –
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'. –