Scope delle variabili

Salve.
Mi sto avvicinando a piccoli passi a ruby.

Sto leggendo un manuale:“Ruby per applicazioni web”.
Qui riporto un esempio per quanto riguarda i thread.

a = 1
Thread.new do
a = 2
end
puts #{a}

il valore riportato da puts dovrebbe essere 2.
Ma lo scope della seconda “a” non dovrebbe essere all’interno di do end?
Mi aspetterei quindi che puts riportasse 1 e non 2.
Grazie.

On 12/16/06, Mauro S. [email protected] wrote:

end
puts #{a}

il valore riportato da puts dovrebbe essere 2.
Ma lo scope della seconda “a” non dovrebbe essere all’interno di do end?
Mi aspetterei quindi che puts riportasse 1 e non 2.
Grazie.

Ciao Mauro,
variabili che non sono state dichiarate nel contesto chiamante, sono
create
all’interno del blocco, locali ad esso e quindi non visibili
all’esterno.
Se assegni però un valore ad una variabile prima di entrare nel blocco,
questa sarà accessibile al blocco perché i blocchi “ereditano l’ambiente”
del contesto chiamante.
Per cui una variabile assegnata prima di entrare nel blocco, può essere
modificata dal blocco, e valutata successivamente.

Ciao,
Antonio

Zen and the Art of Ruby P.ming
http://effettofarfalla.com
Il battito d’ali di un italiano a Toronto