Styr effektnivån
Aktiva bindningar kan också användas för att ange privata fält. I så fall ska bindningsfunktionen ta ett enda argument som heter "value".
Mönstret för att skapa en läs/skriv-aktiv bindning ser ut så här.
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) # eller ett annat påstående
private$..a_field <- value
}
}
)
)
Värden tilldelas som om bindningen vore en datavariabel, inte en funktion.
a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # inte a_thing$a_field("a new value")
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 delvis definierats åt dig.
- Utöka definitionen av mikrovågsugnklassen med ett
active-listelement. - Lägg till en aktiv bindning i
active-elementet för att styra effektnivån.- Funktionen ska heta
power_level_watts. - Den ska ta ett enda argument som heter
value. - Den privata variabeln som ska hämtas/anges heter
..power_level_watts. - Använd
assert_is_a_number()(docs) för att kontrollera attvalueär ett enskilt tal. - Använd
assert_all_are_in_closed_range()(docs) för att kontrollera attvalueligger mellan0och..power_rating_watts.
- Funktionen ska heta
- Skapa ett mikrovågsugnsobjekt och tilldela det till
a_microwave_oven. - Hämta effektnivån.
- Försök att ange effektnivån till värdet
"400"som en sträng. - Försök att ange effektnivån till
1600. - Ange effektnivån till
400.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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
___ <- ___