Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

Er is in je werkruimte al een magnetronfabriek gedefinieerd als microwave_oven_factory.

  • Maak een MicrowaveOven-object en wijs het toe aan a_microwave_oven.
  • Kopieer de magnetron naar een variabele assigned_microwave_oven met behulp van <--toekenning.
  • Kopieer de magnetron naar een variabele cloned_microwave_oven met behulp van de clone()-methode van a_microwave_oven.
  • Verander het veld power_level_watts van a_microwave_oven naar 400.
  • Controleer dat de power_level_watts-velden van a_microwave_oven en assigned_microwave_oven identical() zijn (docs).
  • Controleer dat de power_level_watts-velden van a_microwave_oven en cloned_microwave_oven niet identical() 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(___, ___)  
Code bewerken en uitvoeren