Exponera din föräldraklass
Som standard har R6-klasser bara tillgång till sin direkta förälders funktionalitet. För att möjliggöra åtkomst över flera generationer behöver de mellanliggande klasserna definiera ett aktivt bindande som exponerar föräldern. Det ser ut så här:
active = list(
super_ = function() super
)
Den här övningen är en del av kursen
Objektorienterad programmering med S3 och R6 i R
Övningsinstruktioner
En klass för mikrovågsugnar har fördefinieras åt dig i din workspace.
- Utöka klassen för den avancerade mikrovågsugnen genom att lägga till ett
active-listelement. - Lägg till ett aktivt bindande för att exponera förälderns funktionalitet.
- Bindandet ska heta
super_. - Det ska vara en funktion som inte tar några argument och som returnerar
super.
- Bindandet ska heta
- Skapa en instans av den avancerade mikrovågsugnen och tilldela den till
a_fancy_microwave. - Anropa det aktiva bindandet
super_på den avancerade mikrovågsugnen.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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
___