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
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
MicrowaveOvenet 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_ovenen utilisant la méthodeclone()dea_microwave_oven. - Modifiez le champ
power_level_wattsdea_microwave_ovenà400. - Vérifiez que les champs
power_level_wattsdea_microwave_ovenetassigned_microwave_ovensontidentical()(docs). - Vérifiez que les champs
power_level_wattsdea_microwave_ovenetcloned_microwave_ovenne sont pasidentical()(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(___, ___)