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 => 20ma 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 => 30ovviamente 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