ÎncepețiÎncepe gratuit

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

Vezi cursul

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 variabilei a_microwave_oven.
  • Copiază cuptorul într-o variabilă numită assigned_microwave_oven folosind operatorul <-.
  • Copiază cuptorul într-o variabilă numită cloned_microwave_oven folosind metoda clone() a obiectului a_microwave_oven.
  • Modifică câmpul power_level_watts al obiectului a_microwave_oven la valoarea 400.
  • Verifică că câmpurile power_level_watts ale obiectelor a_microwave_oven și assigned_microwave_oven sunt identical() (docs).
  • Verifică că câmpurile power_level_watts ale obiectelor a_microwave_oven și cloned_microwave_oven nu sunt identical() (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(___, ___)  
Editează și rulează codul