Angriff der Klone (1)
R6-Objekte verwenden – wie Environments – Copy-by-Reference. Das heißt: Wenn du ein R6-Objekt per <- zuweist, spiegeln sich Änderungen an einem Objekt auch in dessen Kopien wider.
a_reference_copy <- an_r6_object
R6-Objekte haben eine automatisch generierte Methode clone(), mit der eine Copy-by-Value-Kopie erstellt wird. So wirken sich Änderungen an einer Kopie nicht auf die anderen aus.
a_value <- an_r6_object$clone()
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung mit S3 und R6 in R
Anleitung zur Übung
In deinem Arbeitsbereich ist eine Mikrowellenofen-Fabrik als microwave_oven_factory vordefiniert.
- Erstelle ein
MicrowaveOven-Objekt und weise esa_microwave_ovenzu. - Kopiere die Mikrowelle per
<--Zuweisung in eine Variable namensassigned_microwave_oven. - Kopiere die Mikrowelle in eine Variable namens
cloned_microwave_ovenmithilfe derclone()-Methode vona_microwave_oven. - Ändere das Feld
power_level_wattsvona_microwave_ovenauf400. - Prüfe, dass die Felder
power_level_wattsvona_microwave_ovenundassigned_microwave_ovenidentical()sind (docs). - Prüfe, dass die Felder
power_level_wattsvona_microwave_ovenundcloned_microwave_ovennichtidentical()sind (docs).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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(___, ___)