Kom igångKom igång gratis

Klonernas attack (2)

Om ett R6-objekt innehåller ett annat R6-objekt i ett eller flera av sina fält, kopierar clone() som standard R6-fälten via referens. För att kopiera dessa R6-fält via värde måste metoden clone() anropas med argumentet deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

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

Objektorienterad programmering med S3 och R6 i R

Visa kurs

Övningsinstruktioner

R6-klassen PowerPlug, som beskriver mikrovågsugnarens strömkontakt, är fördefinierad i din miljö. Klassen MicrowaveOven har uppdaterats och innehåller nu ett PowerPlug-objekt.

  • Skapa ett MicrowaveOven-objekt och tilldela det till a_microwave_oven.
  • Kopiera mikrovågsugnen till en variabel med namnet cloned_microwave_oven med hjälp av metoden clone(), utan några argument.
  • Kopiera mikrovågsugnen till en variabel med namnet deep_cloned_microwave_oven med hjälp av metoden clone(), och skicka med deep = TRUE.
  • Ändra fältet type i fältet power_plug för a_microwave_oven till "British".
  • Kontrollera att fälten power_plug$type för a_microwave_oven och cloned_microwave_oven är identiska.
  • Kontrollera att fälten power_plug$type för a_microwave_oven och deep_cloned_microwave_oven är olika.

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

# Look at its power plug
a_microwave_oven$power_plug

# Copy a_microwave_oven using clone(), no args
cloned_microwave_oven <- ___
  
# Copy a_microwave_oven using clone(), deep = TRUE
deep_cloned_microwave_oven <- ___
  
# Change a_microwave_oven's power plug type  
___$___ <- ___
  
# Check a_microwave_oven & cloned_microwave_oven same 
identical(___, ___)

# Check a_microwave_oven & deep_cloned_microwave_oven different 
identical(___, ___)  
Redigera och kör kod