2013-01-19 8 views

risposta

18

di fare qualcosa di simile al tuo secondo esempio, si sarebbe ancora bisogno di creare tre matrici:

a1, a2, a3 = [], [], [] 
+5

Se l'oggetto viene assegnato capitato di essere immutabili (come, ad esempio, '42'), allora questo potrebbe essere“semplificato”per' a1, a2, a3 = [42] * 3'. –

+5

Mi sembra che sarebbe ancora più semplice come: 'a1 = a2 = a3 = 42' – pguardiario

+0

Questo è un vero peccato. E lascia spazio agli insetti. a = b = [] assegnerà l'array vuoto a b ma a sarà solo un riferimento a b, che non è quello che vuoi. a, b = [] assegnerà nil ad entrambi a e b, perché l'array è vuoto e questo è assegnato al parralel. Quindi, come puoi vedere, non c'è davvero altro modo diverso da a, b = [], [], che è un vero peccato.DONATO – Donato

5

Se ti ostini a non ripetere l'[] letterale, allora un modo è:

a1, a2, a3 = Array.new(3){[]} 

Un altro modo è:

a1 = (a2 = (a3 = []).dup).dup 
+0

Penso che questo potrebbe richiedere un risultato in più in termini di prestazioni, rispetto a a, b = [], [], a causa del richiamo del blocco. Ma questa è solo la mia ipotesi. – Donato

3

rubino assegnazione multipla è inaspettato in s qui sotto ituations:

a1, a2, a3 = [] 

Sopra codice non assegnerà matrice vuoto in qualsiasi variabile matrice.

uso,

a1, a2, a3 = [], [], [] 

è necessario fornire il numero di valori come numero di variabili vengono utilizzati per inizializzare.

0

È anche possibile effettuare le seguenti operazioni:

a1=[]; a2=[]; a3=[] 
+3

in questo modo migliaia di righe di codice possono essere scritte in una fodera ...;) –

0

disposta la seguente frammento si comportano nello stesso modo su tutte le macchine virtuali rubino?

a,b = b,nil 

Il punto di questo rivestimento è di impostare 'un' a un valore da 'b' e reset 'b'.

2

Queste risposte sono sovra-ingegnerizzato, incentrata sulla uso ingannevole di Array nel campione del PO.

a1 = a2 = a3 = [] 
# => [] 

test i risultati

a1 
# => [] 
a2 
# => [] 
a3 
# => [] 
a4 # for sake of comparison 
NameError: undefined local variable or method `a4' for main:Object 
Problemi correlati