LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

In deinem Arbeitsbereich ist eine Mikrowellenofen-Fabrik als microwave_oven_factory vordefiniert.

  • Erstelle ein MicrowaveOven-Objekt und weise es a_microwave_oven zu.
  • Kopiere die Mikrowelle per <--Zuweisung in eine Variable namens assigned_microwave_oven.
  • Kopiere die Mikrowelle in eine Variable namens cloned_microwave_oven mithilfe der clone()-Methode von a_microwave_oven.
  • Ändere das Feld power_level_watts von a_microwave_oven auf 400.
  • Prüfe, dass die Felder power_level_watts von a_microwave_oven und assigned_microwave_oven identical() sind (docs).
  • Prüfe, dass die Felder power_level_watts von a_microwave_oven und cloned_microwave_oven nicht identical() 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(___, ___)  
Code bearbeiten und ausführen