Die Leistung auslesen
Die von einem R6-Objekt gespeicherten Daten sind absichtlich vor Nutzer:innen verborgen, indem sie im Element private gehalten werden. Das ist das Prinzip der Kapselung.
Wenn du Zugriff auf einzelne Datenwerte bereitstellen möchtest, kannst du ein aktives Binding verwenden. Das sind Funktionen, die sich wie Variablen verhalten.
Aktive Bindings werden im Element active eines R6-Objekts gespeichert. Um ein aktives Binding zu erstellen, das ein privates Datenfeld ausliest (also ein „schreibgeschütztes“ Binding), definierst du eine Funktion ohne Argumente, die einfach das private Element zurückgibt.
Das Muster zum Erstellen eines schreibgeschützten aktiven Bindings sieht so aus:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
Das aktive Binding wird wie eine Datenvariable aufgerufen, nicht wie eine Funktion.
a_thing <- thing_factory$new()
a_thing$a_field # nicht a_thing$a_field()
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung mit S3 und R6 in R
Anleitung zur Übung
Eine Mikrowellenfabrik wurde teilweise für dich definiert.
- Ergänze die Definition um ein schreibgeschütztes aktives Binding, das die Ausgangsleistung liefert.
- Das aktive Binding soll
power_rating_wattsheißen. - Es wird als Funktion ohne Argumente definiert.
- Der Funktionskörper soll einfach das private Feld
..power_rating_wattszurückgeben.
- Das aktive Binding soll
- Erzeuge ein Mikrowellen-Objekt und weise es
a_microwave_ovenzu. - Lies seine Leistung aus.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Add a binding for power rating
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
..power_rating_watts = 800
),
active = list(
# Add the binding here
___ = ___
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power rating
___