ÎncepețiÎncepe gratuit

Atacul clonelor (2)

Dacă un obiect R6 conține un alt obiect R6 în unul sau mai multe câmpuri ale sale, atunci în mod implicit clone() va copia câmpurile R6 prin referință. Pentru a copia acele câmpuri R6 prin valoare, metoda clone() trebuie apelată cu argumentul deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

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 clasă R6 numită PowerPlug, care descrie priza de alimentare a cuptorului cu microunde, a fost predefinită în spațiul tău de lucru. Clasa MicrowaveOven a fost actualizată pentru a include un obiect PowerPlug.

  • Creează un obiect MicrowaveOven și atribuie-l variabilei a_microwave_oven.
  • Copiază cuptorul cu microunde într-o variabilă numită cloned_microwave_oven folosind metoda clone(), fără argumente.
  • Copiază cuptorul cu microunde într-o variabilă numită deep_cloned_microwave_oven folosind metoda clone(), cu argumentul deep = TRUE.
  • Modifică câmpul type al câmpului power_plug din a_microwave_oven la "British".
  • Verifică că câmpurile power_plug$type ale obiectelor a_microwave_oven și cloned_microwave_oven sunt identice.
  • Verifică că câmpurile power_plug$type ale obiectelor a_microwave_oven și deep_cloned_microwave_oven sunt diferite.

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()

# Look at its power plug
a_microwave_oven$power_plug

# Copy a_microwave_oven using clone(), no args
cloned_microwave_oven <- ___
  
# Copy a_microwave_oven using clone(), deep = TRUE
deep_cloned_microwave_oven <- ___
  
# Change a_microwave_oven's power plug type  
___$___ <- ___
  
# Check a_microwave_oven & cloned_microwave_oven same 
identical(___, ___)

# Check a_microwave_oven & deep_cloned_microwave_oven different 
identical(___, ___)  
Editează și rulează codul