Aan de slagGa gratis aan de slag

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

Cursus bekijken

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_watts heten.
    • Deze wordt gedefinieerd als een functie, zonder argumenten.
    • De body moet simpelweg het private veld ..power_rating_watts teruggeven.
  • 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
___
Code bewerken en uitvoeren