(irb) a, b = 5
a => 5
b => nil
Non dovrebbe essere il contrario? Cosa sta realmente accadendo qui?Perché l'espressione "a, b = 5" imposta a a 5, ma b a zero in Ruby?
(irb) a, b = 5
a => 5
b => nil
Non dovrebbe essere il contrario? Cosa sta realmente accadendo qui?Perché l'espressione "a, b = 5" imposta a a 5, ma b a zero in Ruby?
Mentre stavo scrivendo questo il mio collega ha scoperto il motivo:
Rubino tratta a, b = 5
come a, b = 5, nil
In python3, un TypeError
viene generata.
Se sei abituato a JavaScript, dove 'var a, b = 5' sono due compiti separati, questo sarà una sorpresa. In Ruby, l'assegnazione delle liste è più simile a '(a, b) = (5, nil)' quando espansa. Il * lato sinistro * è considerato come un elenco. Le cose si fanno ancora più confuse con 'a, b = 5, c = 3' che risulta in' a = 5, b = 3, c = 3'. – tadman
'a, b = 5, c = 3' è meno confuso se lo leggi come ->' a, b = * [5, c = 3] ' –
Rubati tutti i miei punti :( – Jared
Per assegnare un valore a b
utilizzando più assegnazioni, è necessario assegnargli un secondo valore.
a, b = 5, 6
a = 5
b = 6
quando non si fornisce un secondo valore, Ruby dà b
un valore di nil
Questa è una caratteristica importante di Ruby chiama assegnazione multipla.
L'assegnazione multipla esegue più assegnazioni da espressioni o da un array. È un modo rapido per assegnare più variabili contemporaneamente.
Se si dichiarano tre variabili, ma si assegnano solo valori a due di esse, la terza riceverà nil
per impostazione predefinita.
La parte di Assegnazione multipla di this documentation spiega la funzione e diversi esempi.
L'assegnazione multipla considera il lato destro dell'espressione come un array splattato. 'a, b = 5' è interpretato come' a, b = * [5] ' –
Se si desidera assegnare il valore a entrambe le variabili, utilizzare' a = b = 5'. – Gumbo