Kom igångKom igång gratis

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

Visa kurs

Ö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.
  • 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
___
Redigera och kör kod