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

Атака клонів (2)

Якщо об'єкт R6 містить інший об'єкт R6 в одному або кількох своїх полях, то за замовчуванням clone() копіює такі поля R6 за посиланням. Щоб копіювати ці поля R6 за значенням, метод clone() потрібно викликати з аргументом deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Ця вправа є частиною курсу

Об'єктно-орієнтоване програмування з S3 та R6 в R

Переглянути курс

Інструкції до вправи

Клас R6 PowerPlug, який описує вилку живлення мікрохвильової печі, уже визначено у вашому робочому середовищі. Клас MicrowaveOven оновлено, щоб включати об'єкт PowerPlug.

  • Створіть об'єкт MicrowaveOven і присвойте його змінній a_microwave_oven.
  • Скопіюйте мікрохвильовку у змінну cloned_microwave_oven, використавши метод clone() без аргументів.
  • Скопіюйте мікрохвильовку у змінну deep_cloned_microwave_oven, використавши метод clone() з аргументом deep = TRUE.
  • Змініть поле type у полі power_plug об'єкта a_microwave_oven на "British".
  • Переконайтеся, що поля power_plug$type у a_microwave_oven та cloned_microwave_oven ідентичні.
  • Переконайтеся, що поля power_plug$type у a_microwave_oven та deep_cloned_microwave_oven відрізняються.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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