Ú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
Pokyny k cvičení
V tvém pracovním prostoru je předdefinovaná továrna na mikrovlnné trouby jako microwave_oven_factory.
- Vytvoř objekt
MicrowaveOvena přiřaď ho do proměnnéa_microwave_oven. - Zkopíruj mikrovlnnou troubu do proměnné
assigned_microwave_ovenpomocí přiřazení<-. - Zkopíruj mikrovlnnou troubu do proměnné
cloned_microwave_ovenpomocí metodyclone()objektua_microwave_oven. - Změň pole
power_level_wattsobjektua_microwave_ovenna hodnotu400. - Ověř, že pole
power_level_wattsobjektůa_microwave_ovenaassigned_microwave_ovenjsouidentical()(dokumentace). - Ověř, že pole
power_level_wattsobjektůa_microwave_ovenacloned_microwave_ovennejsouidentical()(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(___, ___)