Атака клонів (1)
Об'єкти R6 поводяться зі копіюванням за посиланням так само, як і середовища. Тобто, якщо ви скопіюєте об'єкт R6 за допомогою присвоєння <-, тоді зміни в одному об'єкті відобразяться і в його копіях.
a_reference_copy <- an_r6_object
Об'єкти R6 мають автоматично згенерований метод clone(), який використовують для копіювання за значенням, тож зміни в одній копії не впливають на інші.
a_value <- an_r6_object$clone()
Ця вправа є частиною курсу
Об'єктно-орієнтоване програмування з S3 та R6 в R
Інструкції до вправи
У вашому робочому просторі заздалегідь визначено фабрику мікрохвильових печей microwave_oven_factory.
- Створіть об'єкт
MicrowaveOvenі присвойте його зміннійa_microwave_oven. - Скопіюйте мікрохвильову піч у змінну
assigned_microwave_ovenза допомогою присвоєння<-. - Скопіюйте мікрохвильову піч у змінну
cloned_microwave_oven, використавши методclone()об'єктаa_microwave_oven. - Змініть поле
power_level_wattsоб'єктаa_microwave_ovenна400. - Перевірте, що поля
power_level_wattsоб'єктівa_microwave_ovenіassigned_microwave_ovenєidentical()(docs). - Перевірте, що поля
power_level_wattsоб'єктівa_microwave_ovenіcloned_microwave_ovenне єidentical()(docs).
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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(___, ___)