CommencezCommencez gratuitement

L'attaque des clones (2)

Si un objet R6 contient un autre objet R6 dans un ou plusieurs de ses champs, alors par défaut clone() copie ces champs R6 par référence. Pour copier ces champs R6 par valeur, la méthode clone() doit être appelée avec l'argument deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Cette activité fait partie du cours

Programmation orientée objet avec S3 et R6 en R

Voir le cours

Instructions de l’exercice

Une classe R6 PowerPlug, qui décrit la fiche d'alimentation du four à micro-ondes, est déjà définie dans votre espace de travail. La classe MicrowaveOven a été mise à jour pour inclure un objet PowerPlug.

  • Créez un objet MicrowaveOven et assignez-le à a_microwave_oven.
  • Copiez le four micro-ondes dans une variable nommée cloned_microwave_oven à l'aide de la méthode clone() sans argument.
  • Copiez le four micro-ondes dans une variable nommée deep_cloned_microwave_oven à l'aide de la méthode clone() en passant deep = TRUE.
  • Modifiez le champ type du champ power_plug de a_microwave_oven à "British".
  • Vérifiez que les champs power_plug$type de a_microwave_oven et de cloned_microwave_oven sont identiques.
  • Vérifiez que les champs power_plug$type de a_microwave_oven et de deep_cloned_microwave_oven sont différents.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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(___, ___)  
Modifier et exécuter le code