Atak klonów (1)
Obiekty R6 działają tak samo jak środowiska – kopiują się przez referencję. Oznacza to, że jeśli skopiujesz obiekt R6 za pomocą przypisania <-, zmiany wprowadzone w jednym obiekcie będą widoczne również w kopiach.
a_reference_copy <- an_r6_object
Obiekty R6 mają automatycznie generowaną metodę clone(), która tworzy kopię przez wartość – dzięki temu zmiany w jednej kopii nie wpływają na pozostałe.
a_value <- an_r6_object$clone()
To ćwiczenie jest częścią kursu
Programowanie obiektowe z S3 i R6 w R
Instrukcje do ćwiczenia
W twoim środowisku pracy jest już zdefiniowana fabryka kuchenek mikrofalowych – microwave_oven_factory.
- Utwórz obiekt
MicrowaveOveni przypisz go do zmienneja_microwave_oven. - Skopiuj kuchenkę do zmiennej
assigned_microwave_ovenza pomocą przypisania<-. - Skopiuj kuchenkę do zmiennej
cloned_microwave_oven, używając metodyclone()na obiekciea_microwave_oven. - Zmień wartość pola
power_level_wattsobiektua_microwave_ovenna400. - Sprawdź, czy pola
power_level_wattsobiektówa_microwave_oveniassigned_microwave_ovensąidentical()(dokumentacja). - Sprawdź, czy pola
power_level_wattsobiektówa_microwave_ovenicloned_microwave_ovennie sąidentical()(dokumentacja).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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(___, ___)