Přečtení výkonu
Data uložená v R6 objektu jsou záměrně skryta před uživatelem v elementu private. Toto je princip zapouzdření (encapsulation).
Pokud chceš zpřístupnit některé datové hodnoty, můžeš použít aktivní binding. Aktivní bindingy jsou funkce, které se chovají jako proměnné.
Aktivní bindingy jsou uloženy v elementu active R6 objektu. Chceš-li vytvořit aktivní binding pro čtení privátního datového pole (tzv. binding „pouze pro čtení"), vytvoříš funkci bez argumentů, která jednoduše vrátí daný privátní element.
Vzor pro vytvoření aktivního bindingu pouze pro čtení vypadá takto:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
Aktivní binding se volá jako datová proměnná, nikoli jako funkce.
a_thing <- thing_factory$new()
a_thing$a_field # not a_thing$a_field()
Toto cvičení je součástí kurzu
Objektově orientované programování s S3 a R6 v R
Pokyny k cvičení
Definice továrny na mikrovlnné trouby je pro tebe částečně připravená.
- Doplň definici o aktivní binding pouze pro čtení, který zpřístupní výkon v wattech.
- Aktivní binding pojmenuj
power_rating_watts. - Definuj ho jako funkci bez argumentů.
- Tělo funkce by mělo jednoduše vracet privátní pole
..power_rating_watts.
- Aktivní binding pojmenuj
- Vytvoř objekt mikrovlnné trouby a přiřaď ho do proměnné
a_microwave_oven. - Přečti hodnotu jeho výkonu.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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
___