Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

W twoim środowisku pracy jest już zdefiniowana fabryka kuchenek mikrofalowych – microwave_oven_factory.

  • Utwórz obiekt MicrowaveOven i przypisz go do zmiennej a_microwave_oven.
  • Skopiuj kuchenkę do zmiennej assigned_microwave_oven za pomocą przypisania <-.
  • Skopiuj kuchenkę do zmiennej cloned_microwave_oven, używając metody clone() na obiekcie a_microwave_oven.
  • Zmień wartość pola power_level_watts obiektu a_microwave_oven na 400.
  • Sprawdź, czy pola power_level_watts obiektów a_microwave_oven i assigned_microwave_ovenidentical() (dokumentacja).
  • Sprawdź, czy pola power_level_watts obiektów a_microwave_oven i cloned_microwave_oven nie 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(___, ___)  
Edytuj i uruchom kod