Kom igångKom igång gratis

Exponera din föräldraklass

Som standard har R6-klasser bara tillgång till sin direkta förälders funktionalitet. För att möjliggöra åtkomst över flera generationer behöver de mellanliggande klasserna definiera ett aktivt bindande som exponerar föräldern. Det ser ut så här:

active = list(
  super_ = function() super
)

Den här övningen är en del av kursen

Objektorienterad programmering med S3 och R6 i R

Visa kurs

Övningsinstruktioner

En klass för mikrovågsugnar har fördefinieras åt dig i din workspace.

  • Utöka klassen för den avancerade mikrovågsugnen genom att lägga till ett active-listelement.
  • Lägg till ett aktivt bindande för att exponera förälderns funktionalitet.
    • Bindandet ska heta super_.
    • Det ska vara en funktion som inte tar några argument och som returnerar super.
  • Skapa en instans av den avancerade mikrovågsugnen och tilldela den till a_fancy_microwave.
  • Anropa det aktiva bindandet super_ på den avancerade mikrovågsugnen.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# Expose the parent functionality
fancy_microwave_oven_factory <- R6Class(
  "FancyMicrowaveOven",
  inherit = microwave_oven_factory,
  public = list(
    cook_baked_potato = function() {
      self$cook(3)
    },
    cook = function(time_seconds) {
      super$cook(time_seconds)
      message("Enjoy your dinner!")
    }
  ),
  # Add an active element with a super_ binding
  ___ = ___(
    ___ = ___
  )
)

# Instantiate a fancy microwave
a_fancy_microwave <- ___

# Call the super_ binding
___
Redigera och kör kod