Ovládání výkonu
Aktivní vazby lze také použít k nastavování privátních polí. V takovém případě by funkce vazby měla přijímat jeden argument s názvem „value".
Vzor pro vytvoření aktivní vazby pro čtení i zápis vypadá takto:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function(value) {
if(missing(value)) {
private$..a_field
} else {
assert_is_a_string(value) # nebo jiná assertion
private$..a_field <- value
}
}
)
)
Hodnoty se přiřazují, jako by vazba byla datová proměnná, nikoli funkce.
a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # ne a_thing$a_field("a new value")
Toto cvičení je součástí kurzu
Objektově orientované programování s S3 a R6 v R
Pokyny k cvičení
Třída mikrovlnné trouby je pro tebe částečně připravená.
- Rozšiř definici třídy mikrovlnné trouby o element seznamu
active. - Přidej do elementu
activeaktivní vazbu pro ovládání úrovně výkonu.- Funkce by se měla jmenovat
power_level_watts. - Měla by přijímat jeden argument s názvem
value. - Privátní proměnná pro získání/nastavení hodnoty se jmenuje
..power_level_watts. - Použij
assert_is_a_number()(docs) pro ověření, ževalueje jediné číslo. - Použij
assert_all_are_in_closed_range()(docs) pro ověření, ževalueje v rozsahu od0do..power_rating_watts.
- Funkce by se měla jmenovat
- Vytvoř objekt mikrovlnné trouby a přiřaď ho do proměnné
a_microwave_oven. - Získej aktuální úroveň výkonu.
- Zkus nastavit úroveň výkonu na hodnotu
"400"jako řetězec. - Zkus nastavit úroveň výkonu na
1600. - Nastav úroveň výkonu na
400.
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,
..power_level_watts = 800
),
# Add active list containing an active binding
___ = ___(
___ = ___(___) {
if(missing(___)) {
# Return the private value
___
} else {
# Assert that value is a number
___
# Assert that value is in a closed range from 0 to power rating
___
# Set the private power level to value
___ <- ___
}
}
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power level
___
# Try to set the power level to "400"
___ <- ___
# Try to set the power level to 1600 watts
___ <- ___
# Set the power level to 400 watts
___ <- ___