Variabili Globali
Una variabile globale ha un nome che comincia per
$. prima del nome e si può
rifersi ad essa dovunque nel programma. Prima di essere
inizializzata, la variabile globale ha uno valore
speciale, nil.
ruby> $foo nil ruby> $foo = 5 5 ruby> $foo 5
Le variabili globali dovrebbero essere usate con parsimonia.
Sono pericolose poiché possono venire scritte da
qualsiasi partedel codice. L'abuso di variabili globali
può rendere difficile isolare i bug ; inoltre tende a
indicare che il progetto di un programma non è stato
pensato attentamente . Se doveste trovare necessario
l'uso di una variabile globale, assicuratevi di darle un
nome descrittivo che non venga usato inavvertitamente da
qualcos'altro in seguito (chiamarla con qualcosa come
$foo cpome sopra probabilmente è una
pessima idea ).
Una caratteristica simpatica delle variabili globali è che possono essere tracciate; potete specificare una procedura che sia invocata quando il valore della variabile venga cambiato .
ruby> trace_var :$x, proc{print "$x adesso vale " , $x, ""}
nil
ruby> $x = 5
$x adesso vale 5
5
Quando una variabile globale è stata attrezzata in maniera da invocare una procedura quando viene cambiata , viene detta variabile attiva. Ad esempio, è utile per mantenere il display di una GUI aggiornato.
c'è una collezione di variabili speciali i cui
nomi corrispondono in un segno di dollaro ($)
seguito da un carattere singolo . Ad esempio, $$
contiene il numero identificativo del processo
dell'interprete ruby, ed è read-only. Di seguito
ci sono le variabili principali di sistema ed i loro
significati:
$!
|
ultimo messaggio d'errorelatest error message |
$@
|
posizione dell'errore |
$_
|
ultima stringa letta da gets
|
$.
|
numero dell'ultima linea letta dall'inteprete |
$&
|
ultima stringa riscontrata da una regexp |
$~
|
l'ultimo riscontro di una regexp, come array di sottoespressioni |
$n
|
l' n-esima sottoespressione
nell'ultimo match (lo stesso che
$~[n])
|
$=
|
flag di case-insensitivity (sensibilità alla differenza tra maiuscole/minuscole) |
$/
|
separatore degli input record |
$
|
Separatore degli output record |
$0
|
Il nome del file dello script ruby |
$*
|
Gli argomenti da riga di comando |
$$
|
Il PID dell'interprete |
$?
|
Stato di uscita dell'ultimo processo figlio eseguito |
Nella lista precedente, $_ e $~
hanno visibilità locale. I loro nomi suggeriscono che
dovrebbero essere globali, ma sono molto più utili in
questo modo , e ci sono ragioni storiche per usare questi
nomi .