Lees het vermogen
De gegevens die door een R6-object worden opgeslagen, worden bewust voor de gebruiker verborgen door ze in het element private te bewaren. Dit is het principe van encapsulatie.
Als je toegang wilt geven tot bepaalde gegevenswaarden, kun je een actieve binding gebruiken. Dit zijn functies die zich gedragen als variabelen.
Actieve bindings worden opgeslagen in het element active van een R6-object. Om een actieve binding te maken die een privaat gegevensveld ophaalt (een "alleen-lezen" binding), maak je een functie zonder argumenten die simpelweg het private element teruggeeft.
Het patroon om een alleen-lezen actieve binding te maken is als volgt:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
De actieve binding roep je aan als een gegevensvariabele, niet als een functie.
a_thing <- thing_factory$new()
a_thing$a_field # niet a_thing$a_field()
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren met S3 en R6 in R
Oefeninstructies
Er is al een fabriek voor magnetrons deels voor je gedefinieerd.
- Werk de definitie bij met een alleen-lezen actieve binding om het vermogen op te halen.
- De actieve binding moet
power_rating_wattsheten. - Deze wordt gedefinieerd als een functie, zonder argumenten.
- De body moet simpelweg het private veld
..power_rating_wattsteruggeven.
- De actieve binding moet
- Maak een magnetronobject en ken dit toe aan
a_microwave_oven. - Lees het vermogen uit.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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
___