Läs av effektvärdet
Data som lagras i ett R6-objekt döljs avsiktligt från användaren genom att placeras i private-elementet. Det här är principen om inkapsling.
Om du vill ge åtkomst till något av datavärdena kan du använda en aktiv bindning. Det är funktioner som beter sig som variabler.
Aktiva bindningar lagras i active-elementet i ett R6-objekt. För att skapa en aktiv bindning som hämtar ett privat datafält (dvs. en "skrivskyddad" bindning) skapar du en funktion utan argument som helt enkelt returnerar det privata elementet.
Mönstret för att skapa en skrivskyddad aktiv bindning ser ut så här:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
Den aktiva bindningen anropas som en datavariabel, inte som en funktion.
a_thing <- thing_factory$new()
a_thing$a_field # not a_thing$a_field()
Den här övningen är en del av kursen
Objektorienterad programmering med S3 och R6 i R
Övningsinstruktioner
En mikrovågsugnsfabrik har delvis definierats åt dig.
- Uppdatera definitionen så att den inkluderar en skrivskyddad aktiv bindning för att hämta effektvärdet.
- Den aktiva bindningen ska heta
power_rating_watts. - Den definieras som en funktion utan argument.
- Kroppen ska helt enkelt returnera det privata fältet
..power_rating_watts.
- Den aktiva bindningen ska heta
- Skapa ett mikrovågsugnsobjekt och tilldela det till
a_microwave_oven. - Läs av dess effektvärde.
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
),
active = list(
# Add the binding here
___ = ___
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power rating
___