Angriff der Klone (2)
Wenn ein R6-Objekt in einem oder mehreren seiner Felder ein anderes R6-Objekt enthält, kopiert clone() standardmäßig diese R6-Felder per Referenz. Um diese R6-Felder per Wert zu kopieren, muss die Methode clone() mit dem Argument deep = TRUE aufgerufen werden.
a_deep_copy <- an_r6_object$clone(deep = TRUE)
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung mit S3 und R6 in R
Anleitung zur Übung
Eine R6-Klasse PowerPlug, die den Netzstecker der Mikrowelle beschreibt, wurde in deinem Workspace vordefiniert. Die Klasse MicrowaveOven wurde aktualisiert und enthält nun ein PowerPlug-Objekt.
- Erstelle ein
MicrowaveOven-Objekt und weise esa_microwave_ovenzu. - Kopiere die Mikrowelle in eine Variable namens
cloned_microwave_ovenmit der Methodeclone()ohne Argumente. - Kopiere die Mikrowelle in eine Variable namens
deep_cloned_microwave_ovenmit der Methodeclone()und dem Argumentdeep = TRUE. - Ändere das Feld
typedes Feldspower_plugvona_microwave_ovenauf"British". - Prüfe, dass die Felder
power_plug$typevona_microwave_ovenundcloned_microwave_ovenidentisch sind. - Prüfe, dass die Felder
power_plug$typevona_microwave_ovenunddeep_cloned_microwave_ovenunterschiedlich sind.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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(___, ___)