Je ouder blootleggen
Standaard hebben R6-klassen alleen toegang tot de functionaliteit van hun directe ouder. Om toegang over meerdere generaties mogelijk te maken, moeten tussenliggende klassen een actieve binding definiëren die hun ouder blootlegt. Dat ziet er zo uit:
active = list(
super_ = function() super
)
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren met S3 en R6 in R
Oefeninstructies
Er is al een magnetronklasse voor je klaargezet in je werkruimte.
- Breid de fancy magnetronklasse uit door een
active-listelement toe te voegen. - Voeg een actieve binding toe die de functionaliteit van de ouder blootlegt.
- De binding moet
super_heten. - Het moet een functie zijn zonder argumenten die simpelweg
superteruggeeft.
- De binding moet
- Instantier een fancy magnetronobject en ken het toe aan
a_fancy_microwave. - Roep de
super_-binding van de fancy magnetron aan.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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
___