CommencerCommencer gratuitement

L’attaque des clones (1)

Les objets R6 utilisent le même comportement de copie par référence que les environnements. Autrement dit, si vous copiez un objet R6 avec une affectation <-, alors les modifications apportées à un objet seront également visibles dans ses copies.

a_reference_copy <- an_r6_object

Les objets R6 disposent d’une méthode clone() générée automatiquement, qui permet de créer une copie par valeur ; ainsi, les modifications apportées à une copie n’affectent pas les autres.

a_value <- an_r6_object$clone()

Cet exercice fait partie du cours

Programmation orientée objet avec S3 et R6 en R

Afficher le cours

Instructions

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

  • Créez un objet MicrowaveOven et assignez-le à a_microwave_oven.
  • Copiez le micro-ondes dans une variable nommée assigned_microwave_oven en utilisant l’affectation <-.
  • Copiez le 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 cet exemple de code.

# 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