Qualche info


#1

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

Grazie


#2

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.