Attack of the Clones (1)
R6-objecten gebruiken hetzelfde kopiëren-door-verwijzinggedrag als omgevingen. Dus als je een R6-object kopieert met een <--toekenning, worden wijzigingen in het ene object ook zichtbaar in de kopieën.
a_reference_copy <- an_r6_object
R6-objecten hebben een automatisch gegenereerde clone()-methode die wordt gebruikt om een kopie op waarde te maken, zodat wijzigingen in de ene kopie geen effect hebben op de andere.
a_value <- an_r6_object$clone()
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren met S3 en R6 in R
Oefeninstructies
Er is in je werkruimte al een magnetronfabriek gedefinieerd als microwave_oven_factory.
- Maak een
MicrowaveOven-object en wijs het toe aana_microwave_oven. - Kopieer de magnetron naar een variabele
assigned_microwave_ovenmet behulp van<--toekenning. - Kopieer de magnetron naar een variabele
cloned_microwave_ovenmet behulp van declone()-methode vana_microwave_oven. - Verander het veld
power_level_wattsvana_microwave_ovennaar400. - Controleer dat de
power_level_watts-velden vana_microwave_ovenenassigned_microwave_ovenidentical()zijn (docs). - Controleer dat de
power_level_watts-velden vana_microwave_ovenencloned_microwave_ovennietidentical()zijn (docs).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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(___, ___)