EmpezarEmpieza gratis

El ataque de los clones (2)

Si un objeto R6 contiene otro objeto R6 en uno o varios de sus campos, entonces por defecto clone() copiará esos campos R6 por referencia. Para copiarlos por valor, debes llamar al método clone() con el argumento deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Este ejercicio forma parte del curso

Programación orientada a objetos con S3 y R6 en R

Ver curso

Instrucciones del ejercicio

En tu espacio de trabajo se ha predefinido una clase R6 PowerPlug para describir el enchufe del microondas. La clase MicrowaveOven se ha actualizado para incluir un objeto PowerPlug.

  • Crea un objeto MicrowaveOven y asígnalo a a_microwave_oven.
  • Copia el microondas en una variable llamada cloned_microwave_oven usando el método clone() sin argumentos.
  • Copia el microondas en una variable llamada deep_cloned_microwave_oven usando el método clone() pasando deep = TRUE.
  • Cambia el campo type del campo power_plug de a_microwave_oven a "British".
  • Verifica que los campos power_plug$type de a_microwave_oven y cloned_microwave_oven sean idénticos.
  • Verifica que los campos power_plug$type de a_microwave_oven y deep_cloned_microwave_oven sean diferentes.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()

# Look at its power plug
a_microwave_oven$power_plug

# Copy a_microwave_oven using clone(), no args
cloned_microwave_oven <- ___
  
# Copy a_microwave_oven using clone(), deep = TRUE
deep_cloned_microwave_oven <- ___
  
# Change a_microwave_oven's power plug type  
___$___ <- ___
  
# Check a_microwave_oven & cloned_microwave_oven same 
identical(___, ___)

# Check a_microwave_oven & deep_cloned_microwave_oven different 
identical(___, ___)  
Editar y ejecutar código