Začněte nyníZačněte zdarma

Odhalení rodiče

Ve výchozím nastavení mají třídy R6 přístup pouze k funkcionalitě svého přímého rodiče. Aby byl přístup možný přes více generací, musí mezilehlé třídy definovat aktivní vazbu (active binding), která rodiče zpřístupní. Vypadá to takto:

active = list(
  super_ = function() super
)

Toto cvičení je součástí kurzu

Objektově orientované programování s S3 a R6 v R

Zobrazit kurz

Pokyny k cvičení

Ve tvém pracovním prostoru je předem definovaná třída mikrovlnné trouby.

  • Rozšiř třídu fancy mikrovlnné trouby přidáním prvku active do seznamu.
  • Přidej aktivní vazbu, která zpřístupní funkcionalitu jejího rodiče.
    • Vazba by se měla jmenovat super_.
    • Měla by to být funkce bez argumentů, která jednoduše vrátí super.
  • Vytvoř instanci fancy mikrovlnky a přiřaď ji do proměnné a_fancy_microwave.
  • Zavolej vazbu super_ na fancy mikrovlnce.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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
___
Upravit a spustit kód