Se ho:Ambito di una variabile locale in un blocco
2.times do
i ||= 1
print "#{i} "
i += 1
print "#{i} "
end
ottengo 1 2 1 2
, mentre io aspettavo 1 2 2 3
. Perché i
perde il suo incarico quando ricomincia il ciclo? Si comporta come previsto se l'assegnazione avviene al di fuori del ciclo, quindi suppongo che abbia a che fare con lo scope, ma non ho realizzato che i loop abbiano i loro scopi. Qualcuno può chiarire?
Aggiornamento: Grazie per l'aiuto su questo. Parte della mia confusione derivava dal venire a Ruby da Python, che non ha scope di blocco (credo).
è questo per scopi pedagogici? perché questo tipo di codice è completamente unidiomatico ... – tokland