CommencezCommencez gratuitement

L'attaque des clones (1)

Les objets R6 utilisent la même logique de copie par référence que les environnements. Autrement dit, si vous copiez un objet R6 avec l'affectation <-, toute modification apportée à un objet se reflétera aussi dans ses copies.

a_reference_copy <- an_r6_object

Les objets R6 disposent d'une méthode clone() générée automatiquement, qui sert à créer une copie par valeur, de sorte que les modifications faites à une copie n'affectent pas les autres.

a_value <- an_r6_object$clone()

Cette activité fait partie du cours

Programmation orientée objet avec S3 et R6 en R

Voir le cours

Instructions de l’exercice

Une fabrique de fours à micro-ondes a été préconfigurée dans votre espace de travail sous le nom microwave_oven_factory.

  • Créez un objet MicrowaveOven et assignez-le à a_microwave_oven.
  • Copiez le four micro-ondes dans une variable nommée assigned_microwave_oven à l'aide de l'affectation <-.
  • Copiez le four micro-ondes dans une variable nommée cloned_microwave_oven en utilisant la méthode clone() de a_microwave_oven.
  • Modifiez le champ power_level_watts de a_microwave_oven à 400.
  • Vérifiez que les champs power_level_watts de a_microwave_oven et assigned_microwave_oven sont identical() (docs).
  • Vérifiez que les champs power_level_watts de a_microwave_oven et cloned_microwave_oven ne sont pas identical() (docs).

Exercice interactif pratique

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

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