Udostępnianie klasy nadrzędnej
Domyślnie klasy R6 mają dostęp wyłącznie do funkcjonalności swojej bezpośredniej klasy nadrzędnej. Aby umożliwić dostęp przez wiele poziomów dziedziczenia, klasy pośrednie muszą zdefiniować aktywne powiązanie (active binding), które udostępnia ich klasę nadrzędną. Wygląda to następująco:
active = list(
super_ = function() super
)
To ćwiczenie jest częścią kursu
Programowanie obiektowe z S3 i R6 w R
Instrukcje do ćwiczenia
W twoim środowisku pracy jest już wstępnie zdefiniowana klasa kuchenki mikrofalowej.
- Rozszerz klasę fancy microwave oven, dodając element listy
active. - Dodaj aktywne powiązanie, które udostępni funkcjonalność jej klasy nadrzędnej.
- Powiązanie powinno mieć nazwę
super_. - Powinno być funkcją, która nie przyjmuje żadnych argumentów i po prostu zwraca
super.
- Powiązanie powinno mieć nazwę
- Utwórz instancję obiektu fancy microwave i przypisz ją do zmiennej
a_fancy_microwave. - Wywołaj powiązanie
super_obiektu fancy microwave.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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
___