Ataque dos Clones (1)
Objetos R6 usam o mesmo comportamento de cópia por referência que ambientes. Ou seja, se você copiar um objeto R6 usando a atribuição <-, então mudanças em um objeto também serão refletidas nas cópias.
a_reference_copy <- an_r6_object
Objetos R6 têm um método clone() gerado automaticamente, usado para criar uma cópia por valor, de modo que mudanças em uma cópia não afetam as outras.
a_value <- an_r6_object$clone()
Este exercicio faz parte do curso
Programação Orientada a Objetos com S3 e R6 em R
Instruções do exercicio
Uma fábrica de fornos de micro-ondas foi predefinida no seu ambiente como microwave_oven_factory.
- Crie um objeto
MicrowaveOvene atribua-o aa_microwave_oven. - Copie o micro-ondas para uma variável chamada
assigned_microwave_ovenusando a atribuição<-. - Copie o micro-ondas para uma variável chamada
cloned_microwave_ovenusando o métodoclone()dea_microwave_oven. - Altere o campo
power_level_wattsdea_microwave_ovenpara400. - Verifique se os campos
power_level_wattsdea_microwave_oveneassigned_microwave_ovensãoidentical()(docs). - Verifique se os campos
power_level_wattsdea_microwave_ovenecloned_microwave_ovennão sãoidentical()(docs).
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
# 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(___, ___)