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

Ovládání výkonu

Aktivní vazby lze také použít k nastavování privátních polí. V takovém případě by funkce vazby měla přijímat jeden argument s názvem „value".

Vzor pro vytvoření aktivní vazby pro čtení i zápis vypadá takto:

thing_factory <- R6Class(
  "Thing",
  private = list(
    ..a_field = "a value"
  ),
  active = list(
    a_field = function(value) {
      if(missing(value)) {
        private$..a_field
      } else {
        assert_is_a_string(value) # nebo jiná assertion
        private$..a_field <- value
      }
    }
  )
)

Hodnoty se přiřazují, jako by vazba byla datová proměnná, nikoli funkce.

a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # ne a_thing$a_field("a new value")

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

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

Zobrazit kurz

Pokyny k cvičení

Třída mikrovlnné trouby je pro tebe částečně připravená.

  • Rozšiř definici třídy mikrovlnné trouby o element seznamu active.
  • Přidej do elementu active aktivní vazbu pro ovládání úrovně výkonu.
    • Funkce by se měla jmenovat power_level_watts.
    • Měla by přijímat jeden argument s názvem value.
    • Privátní proměnná pro získání/nastavení hodnoty se jmenuje ..power_level_watts.
    • Použij assert_is_a_number() (docs) pro ověření, že value je jediné číslo.
    • Použij assert_all_are_in_closed_range() (docs) pro ověření, že value je v rozsahu od 0 do ..power_rating_watts.
  • Vytvoř objekt mikrovlnné trouby a přiřaď ho do proměnné a_microwave_oven.
  • Získej aktuální úroveň výkonu.
  • Zkus nastavit úroveň výkonu na hodnotu "400" jako řetězec.
  • Zkus nastavit úroveň výkonu na 1600.
  • Nastav úroveň výkonu na 400.

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

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

# Add a binding for power rating
microwave_oven_factory <- R6Class(
  "MicrowaveOven",
  private = list(
    ..power_rating_watts = 800,
    ..power_level_watts = 800
  ),
  # Add active list containing an active binding
  ___ = ___(
    ___ = ___(___) {
      if(missing(___)) {
        # Return the private value
        ___
      } else {
        # Assert that value is a number
        ___
        # Assert that value is in a closed range from 0 to power rating
        ___
        # Set the private power level to value
        ___ <- ___
      }
    }
  )
)

# Make a microwave 
a_microwave_oven <- ___

# Get the power level
___

# Try to set the power level to "400"
___ <- ___

# Try to set the power level to 1600 watts
___ <- ___

# Set the power level to 400 watts
___ <- ___
Upravit a spustit kód