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
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
MicrowaveOvenet assignez-le àa_microwave_oven. - Copiez le micro-ondes dans une variable nommée
assigned_microwave_ovenen utilisant l’affectation<-. - Copiez le 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 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(___, ___)