Forum: Italian Ruby user group Qualche info

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
136d8428fd5efba4c0a31e46491c013a?d=identicon&s=25 Alessandro Mazzone (alex89)
on 2009-03-14 19:10
Esistono i distruttori in ruby?Ed è possibile usare un passaggio per
riferimento sempre in ruby?


Grazie
7daea92c28be2e85196a4f6dfdb2f689?d=identicon&s=25 Claudio Petasecca Donati (etapeta)
on 2009-03-15 00:33
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.
This topic is locked and can not be replied to.