# Qualche info

**URL:** <https://www.ruby-forum.com/t/qualche-info/162868>\
**Category:** IT\
**Created:** [March 14, 2009, 7:10pm UTC](https://www.ruby-forum.com/t/qualche-info/162868 "2009-03-14T19:10:39Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![alexpescara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b487fb/32.png) [@alexpescara](https://www.ruby-forum.com/u/alexpescara)\
**Post date:** [March 14, 2009, 7:10pm UTC](https://www.ruby-forum.com/t/qualche-info/162868/1 "2009-03-14T19:10:39Z")

</div>

Esistono i distruttori in ruby?Ed Ã¨ possibile usare un passaggio per  
riferimento sempre in ruby?

Grazie

---

<div class="post-metadata">

**Author:** ![alexpescara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b487fb/32.png) [@alexpescara](https://www.ruby-forum.com/u/alexpescara)\
**Post date:** [March 15, 2009, 12:33am UTC](https://www.ruby-forum.com/t/qualche-info/162868/2 "2009-03-15T00:33:01Z")

</div>

Alessandro M. 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.
