ПочатиПочніть безкоштовно

Атака клонів (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(___, ___)  
Редагувати та запускати код