Comece agoraComece grátis

Ataque dos Clones (2)

Se um objeto R6 contiver outro objeto R6 em um ou mais de seus campos, então, por padrão, clone() copiará os campos R6 por referência. Para copiar esses campos R6 por valor, o método clone() deve ser chamado com o argumento deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Este exercicio faz parte do curso

Programação Orientada a Objetos com S3 e R6 em R

Ver curso

Instruções do exercicio

Uma classe R6 PowerPlug, que descreve o plugue de energia do micro-ondas, já foi pré-definida no seu workspace. A classe MicrowaveOven foi atualizada para incluir um objeto PowerPlug.

  • Crie um objeto MicrowaveOven e atribua-o a a_microwave_oven.
  • Copie o micro-ondas para uma variável chamada cloned_microwave_oven usando o método clone() sem argumentos.
  • Copie o micro-ondas para uma variável chamada deep_cloned_microwave_oven usando o método clone() com deep = TRUE.
  • Altere o campo type do campo power_plug de a_microwave_oven para "British".
  • Verifique se os campos power_plug$type de a_microwave_oven e cloned_microwave_oven são idênticos.
  • Verifique se os campos power_plug$type de a_microwave_oven e deep_cloned_microwave_oven são diferentes.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

# 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 e Executar Código