Atacul clonelor (1)
Obiectele R6 folosesc același comportament de copiere prin referință ca și mediile (environments). Adică, dacă copiezi un obiect R6 folosind operatorul <-, orice modificare aplicată unui obiect se va reflecta și în copii.
a_reference_copy <- an_r6_object
Obiectele R6 dispun de o metodă clone() generată automat, care creează o copie prin valoare — astfel, modificările aduse unei copii nu le afectează pe celelalte.
a_value <- an_r6_object$clone()
Acest exercițiu face parte din cursul
Programare orientată pe obiecte cu S3 și R6 în R
Instrucțiuni pentru exercițiu
O fabrică de cuptoare cu microunde a fost predefinită în spațiul tău de lucru sub numele microwave_oven_factory.
- Creează un obiect
MicrowaveOvenși atribuie-l variabileia_microwave_oven. - Copiază cuptorul într-o variabilă numită
assigned_microwave_ovenfolosind operatorul<-. - Copiază cuptorul într-o variabilă numită
cloned_microwave_ovenfolosind metodaclone()a obiectuluia_microwave_oven. - Modifică câmpul
power_level_wattsal obiectuluia_microwave_ovenla valoarea400. - Verifică că câmpurile
power_level_wattsale obiectelora_microwave_ovenșiassigned_microwave_ovensuntidentical()(docs). - Verifică că câmpurile
power_level_wattsale obiectelora_microwave_ovenșicloned_microwave_ovennu suntidentical()(docs).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()
# Copy a_microwave_oven using <-
assigned_microwave_oven <- ___
# Copy a_microwave_oven using clone()
cloned_microwave_oven <- ___$___()
# Change a_microwave_oven's power level
___ <- ___
# Check a_microwave_oven & assigned_microwave_oven same
identical(___, ___)
# Check a_microwave_oven & cloned_microwave_oven different
identical(___, ___)