LoslegenKostenlos starten

Den Parent freilegen

Standardmäßig haben R6-Klassen nur Zugriff auf die Funktionalität ihres direkten Parents. Damit der Zugriff über mehrere Generationen hinweg möglich ist, müssen die Zwischenklassen eine Active Binding definieren, die ihren Parent freilegt. Das hat die Form

active = list(
  super_ = function() super
)

Diese Übung ist Teil des Kurses

<Kurs>Objektorientierte Programmierung mit S3 und R6 in R</Kurs>
Kurs ansehen

Übungsanweisungen

In deinem Workspace ist bereits eine Mikrowellenklasse vordefiniert.

  • Erweitere die „fancy microwave oven“-Klasse, indem du ein active-Listenelement hinzufügst.
  • Füge eine Active Binding hinzu, um die Funktionalität ihres Parents freizulegen.
    • Die Binding soll super_ heißen.
    • Sie soll eine Funktion sein, die keine Argumente nimmt und einfach super zurückgibt.
  • Instanziiere ein „fancy microwave“-Objekt und weise es a_fancy_microwave zu.
  • Rufe die super_-Binding der „fancy microwave“ auf.

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

# Expose the parent functionality
fancy_microwave_oven_factory <- R6Class(
  "FancyMicrowaveOven",
  inherit = microwave_oven_factory,
  public = list(
    cook_baked_potato = function() {
      self$cook(3)
    },
    cook = function(time_seconds) {
      super$cook(time_seconds)
      message("Enjoy your dinner!")
    }
  ),
  # Add an active element with a super_ binding
  ___ = ___(
    ___ = ___
  )
)

# Instantiate a fancy microwave
a_fancy_microwave <- ___

# Call the super_ binding
___
Code bearbeiten und ausführen