El ataque de los clones (1)
Los objetos R6 usan el mismo comportamiento de copia por referencia que los entornos. Es decir, si copias un objeto R6 usando la asignación <-, los cambios en un objeto también se reflejarán en sus copias.
a_reference_copy <- an_r6_object
Los objetos R6 tienen un método clone() generado automáticamente que se usa para crear una copia por valor, de modo que los cambios en una copia no afecten a las demás.
a_value <- an_r6_object$clone()
Este ejercicio forma parte del curso
Programación orientada a objetos con S3 y R6 en R
Instrucciones del ejercicio
En tu espacio de trabajo ya hay una fábrica de microondas predefinida como microwave_oven_factory.
- Crea un objeto
MicrowaveOveny asígnalo aa_microwave_oven. - Copia el microondas en una variable llamada
assigned_microwave_ovenusando la asignación<-. - Copia el microondas en una variable llamada
cloned_microwave_ovenusando el métodoclone()dea_microwave_oven. - Cambia el campo
power_level_wattsdea_microwave_ovena400. - Verifica que los campos
power_level_wattsdea_microwave_ovenyassigned_microwave_ovenseanidentical()(docs). - Verifica que los campos
power_level_wattsdea_microwave_ovenycloned_microwave_ovenno seanidentical()(docs).
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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(___, ___)