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
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 aana_microwave_oven. - Kopieer de magnetron naar een variabele
cloned_microwave_ovenmet de methodeclone()zonder argumenten. - Kopieer de magnetron naar een variabele
deep_cloned_microwave_ovenmet de methodeclone()en geefdeep = TRUEmee. - Verander het veld
typevan het veldpower_plugvana_microwave_ovennaar"British". - Controleer dat de velden
power_plug$typevana_microwave_ovenencloned_microwave_ovenidentiek zijn. - Controleer dat de velden
power_plug$typevana_microwave_ovenendeep_cloned_microwave_ovenverschillend 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(___, ___)