Začněte nyníZačněte zdarma

Útok klonů (2)

Pokud R6 objekt obsahuje v jednom nebo více polích jiný R6 objekt, metoda clone() ve výchozím nastavení zkopíruje tato R6 pole odkazem. Aby došlo ke kopírování hodnotou, je nutné zavolat metodu clone() s argumentem deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Toto cvičení je součástí kurzu

Objektově orientované programování s S3 a R6 v R

Zobrazit kurz

Pokyny k cvičení

V tvém pracovním prostoru je předem definovaná R6 třída PowerPlug popisující zástrčku mikrovlnné trouby. Třída MicrowaveOven byla aktualizována tak, aby obsahovala objekt PowerPlug.

  • Vytvoř objekt třídy MicrowaveOven a přiřaď ho do proměnné a_microwave_oven.
  • Zkopíruj mikrovlnnou troubu do proměnné cloned_microwave_oven pomocí metody clone() bez argumentů.
  • Zkopíruj mikrovlnnou troubu do proměnné deep_cloned_microwave_oven pomocí metody clone() s argumentem deep = TRUE.
  • Změň pole type v poli power_plug objektu a_microwave_oven na hodnotu "British".
  • Ověř, že pole power_plug$type objektů a_microwave_oven a cloned_microwave_oven jsou shodná.
  • Ověř, že pole power_plug$type objektů a_microwave_oven a deep_cloned_microwave_oven se liší.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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(___, ___)  
Upravit a spustit kód