Odhalení rodiče
Ve výchozím nastavení mají třídy R6 přístup pouze k funkcionalitě svého přímého rodiče. Aby byl přístup možný přes více generací, musí mezilehlé třídy definovat aktivní vazbu (active binding), která rodiče zpřístupní. Vypadá to takto:
active = list(
super_ = function() super
)
Toto cvičení je součástí kurzu
Objektově orientované programování s S3 a R6 v R
Pokyny k cvičení
Ve tvém pracovním prostoru je předem definovaná třída mikrovlnné trouby.
- Rozšiř třídu fancy mikrovlnné trouby přidáním prvku
activedo seznamu. - Přidej aktivní vazbu, která zpřístupní funkcionalitu jejího rodiče.
- Vazba by se měla jmenovat
super_. - Měla by to být funkce bez argumentů, která jednoduše vrátí
super.
- Vazba by se měla jmenovat
- Vytvoř instanci fancy mikrovlnky a přiřaď ji do proměnné
a_fancy_microwave. - Zavolej vazbu
super_na fancy mikrovlnce.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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
___