[ruby-it] Qualche info

Claudio Petasecca Donati cpetasecca a gmail.com
Dom 15 Mar 2009 00:33:01 CET


Alessandro Mazzone wrote:
> Esistono i distruttori in ruby?Ed è possibile usare un passaggio per
> riferimento sempre in ruby?
> 
> 
> Grazie

In ruby non esistono distruttori.

Il passaggio di parametri invece e' un po' diverso dai linguaggi 
"antichi" come C e Pascal.
In Ruby ogni cosa e' un oggetto.
Tu non manipoli gli oggetti direttamente, ma riferimenti ad essi.
Le variabili sono solo riferimenti ad oggetti.
E quando passi un riferimento in un metodo, viene passato per valore, 
cioe' duplicato.

Detto cosi' sembra strano, ma vediamo se qualche esempio chiarisce.

Quando fai:

def add(list, obj)
  list << obj
end

list = []
add(list, 10)
puts list.inspect  # [10]

quello che ottieni e' che la lista originale e' stata modificata, come 
succede in un normale passaggio per riferimento.

Pero' i riferimenti vengono copiati.

Se fai:

def swap(a, b)
  a, b = b, a
end
x, y = 10, 20
puts [x, y]    # => [10, 20]
swap(x, y)
puts [x, y]    # => [10, 20]

le variabili x e y non vengono effettivamente scambiate perche' al 
metodo swap hai passato copie dei tuoi riferimenti, cioe' x ed a sono 
due riferimenti diversi che stanno puntando allo stesso oggetto, il 
Fixnum di valore 10.
Percio' nell'istruzione di scambio
a, b = b, a
non stai alterando le variabili x e y che avevi al di fuori della 
funzione.
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list