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

Útok klonů (1)

R6 objekty se chovají stejně jako prostředí – pracují s kopírováním odkazem. To znamená, že pokud zkopíruješ R6 objekt pomocí přiřazení <-, změny v jednom objektu se projeví i ve všech jeho kopiích.

a_reference_copy <- an_r6_object

R6 objekty mají automaticky generovanou metodu clone(), která vytvoří kopii hodnotou – změny v jedné kopii tedy neovlivní ostatní.

a_value <- an_r6_object$clone()

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ředdefinovaná továrna na mikrovlnné trouby jako microwave_oven_factory.

  • Vytvoř objekt MicrowaveOven a přiřaď ho do proměnné a_microwave_oven.
  • Zkopíruj mikrovlnnou troubu do proměnné assigned_microwave_oven pomocí přiřazení <-.
  • Zkopíruj mikrovlnnou troubu do proměnné cloned_microwave_oven pomocí metody clone() objektu a_microwave_oven.
  • Změň pole power_level_watts objektu a_microwave_oven na hodnotu 400.
  • Ověř, že pole power_level_watts objektů a_microwave_oven a assigned_microwave_oven jsou identical() (dokumentace).
  • Ověř, že pole power_level_watts objektů a_microwave_oven a cloned_microwave_oven nejsou identical() (dokumentace).

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()

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