Inizializzazione Condizionale

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


In alcuni casi e’ necessario assegnare un valore ad una variabile solamente nel caso che non sia gia’ stata definita in modo differente. Ad esempio, lavorando con il web potrebbe essere necessario impostare il nome dell’utente online in un certo momento, ma non sovrascrivelo ogni volta.

La soluzione piu’ ovvia e’:
 >> a=10
 => 10
 >> a= a || 20
 => 10
 >> b= b || 20
 => 20
ma poiche’ gli operatori possono essere combinati con l’assegnazione:
 >> a ||= 20
 => 10
 >> b ||= 30
 => 20
 >> c ||= 40
 => 40
 >> [a,b,c]
 => [10, 20, 40]
Ovviamente pero’ se la variabile ha come valore false o nil essa verra’ sovrascritta con il nuovo valore. In generale questo e’ quello che vogliamo, ma in caso contrario possiamo usare defined? per chiedere a ruby se, appunto, la variabile e’ stata definita:
 >> pippo
 NameError: undefined local variable or method `pippo' for main:Object
 >> if not defined? pippo
 >>  pippo=30
 >> end
 => 30
 >> pippo
 => 30
ovviamente potete fare lo stesso per le variabili globali o d’istanza. Per una esecuzione più rapida – ma codice meno chiaro:
begin pippo rescue pippo = 30 end
Updated on June 28, 2007 00:41 by Ruby Fan (84.222.80.161)