LoslegenKostenlos loslegen

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

Kurs anzeigen

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 es a_microwave_oven zu.
  • Kopiere die Mikrowelle in eine Variable namens cloned_microwave_oven mit der Methode clone() ohne Argumente.
  • Kopiere die Mikrowelle in eine Variable namens deep_cloned_microwave_oven mit der Methode clone() und dem Argument deep = TRUE.
  • Ändere das Feld type des Felds power_plug von a_microwave_oven auf "British".
  • Prüfe, dass die Felder power_plug$type von a_microwave_oven und cloned_microwave_oven identisch sind.
  • Prüfe, dass die Felder power_plug$type von a_microwave_oven und deep_cloned_microwave_oven unterschiedlich 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(___, ___)  
Code bearbeiten und ausführen