Aan de slagGa gratis aan de slag

Attack of the Clones (2)

Als een R6-object in een of meer velden een ander R6-object bevat, kopieert clone() die R6-velden standaard via referentie. Om die R6-velden op waarde te kopiëren, moet de methode clone() worden aangeroepen met het argument deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Deze oefening maakt deel uit van de cursus

Objectgeoriënteerd programmeren met S3 en R6 in R

Cursus bekijken

Oefeninstructies

Een R6-klasse PowerPlug om de stekker van de magnetron te beschrijven is vooraf gedefinieerd in je workspace. De klasse MicrowaveOven is bijgewerkt en bevat nu een PowerPlug-object.

  • Maak een MicrowaveOven-object en ken het toe aan a_microwave_oven.
  • Kopieer de magnetron naar een variabele cloned_microwave_oven met de methode clone() zonder argumenten.
  • Kopieer de magnetron naar een variabele deep_cloned_microwave_oven met de methode clone() en geef deep = TRUE mee.
  • Verander het veld type van het veld power_plug van a_microwave_oven naar "British".
  • Controleer dat de velden power_plug$type van a_microwave_oven en cloned_microwave_oven identiek zijn.
  • Controleer dat de velden power_plug$type van a_microwave_oven en deep_cloned_microwave_oven verschillend zijn.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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(___, ___)  
Code bewerken en uitvoeren