Kom igångKom igång gratis

Kloningarnas attack (1)

R6-objekt använder samma kopiering via referens som miljöer. Det innebär att om du kopierar ett R6-objekt med <--tilldelning, kommer ändringar i ett objekt även att återspeglas i kopiorna.

a_reference_copy <- an_r6_object

R6-objekt har en automatiskt genererad clone()-metod som används för att skapa en kopia via värde, så att ändringar i en kopia inte påverkar de övriga.

a_value <- an_r6_object$clone()

Den här övningen är en del av kursen

Objektorienterad programmering med S3 och R6 i R

Visa kurs

Övningsinstruktioner

En mikrovågsugnsfabrik har fördefifierats i din arbetsyta som microwave_oven_factory.

  • Skapa ett MicrowaveOven-objekt och tilldela det till a_microwave_oven.
  • Kopiera mikrovågsugnen till en variabel med namnet assigned_microwave_oven med <--tilldelning.
  • Kopiera mikrovågsugnen till en variabel med namnet cloned_microwave_oven med hjälp av clone()-metoden på a_microwave_oven.
  • Ändra fältet power_level_watts i a_microwave_oven till 400.
  • Kontrollera att fälten power_level_watts i a_microwave_oven och assigned_microwave_oven är identical() (docs).
  • Kontrollera att fälten power_level_watts i a_microwave_oven och cloned_microwave_oven inte är identical() (docs).

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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(___, ___)  
Redigera och kör kod