Creare una copia di un oggetto non e’ la stessa cosa che creare una variabile che usi lo stesso oggetto.
Con l’operattore di assegnazione (il “
=“) diciamo semplicemente a ruby “questa variabile rappresenta quell’oggetto”:
>> s1='ciao' => "ciao" >> s2=s1 => "ciao" >> s1.object_id==s2.object_id => trueDovrebbe essere ovvio che
object_id() ci restituisce un valore che identifica univocamente un oggetto :)
Ovviamente, in alcuni casi vorremmo avere un oggetto che si uguale ad un altro, ma non lo stesso, magari perche’ vogliamo cambiare uno dei due indipendentemente dall’altro.
In questo caso dobbiamo usaredup() :
>> s1='ciao' => "ciao" >> s2=s1.dup => "ciao" >> p s1.object_id, s2.object_id 20905692 20897916 => nilcome vedete l’
object_id e’ differente tra i due.
Se volete potete anche usare clone() , che e’ un alias di dup():
>> s3=s2.clone => "ciao" >> p s1.object_id,s2.object_id,s3.object_id 20905692 20897916 20877096 => nilOvviamente sono diversi oggetti , ma ognuno e’ uguale agli altri:
>> s1== s2 and s2== s3 => trueOvviamente dovete definire voi un metodo
dup() in maniera coerente. Ricordate che in genere la duplicazione implica la duplicazione degli ettributi, e non il semplice riferimento agli stessi.