ÎncepețiÎncepe gratuit

Controlează puterea

Legăturile active pot fi folosite și pentru a seta câmpuri private. În acest caz, funcția de legătură trebuie să accepte un singur argument, numit „value".

Modelul pentru crearea unei legături active de citire/scriere este următorul.

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) # sau o altă verificare
        private$..a_field <- value
      }
    }
  )
)

Valorile se atribuie ca și cum legătura ar fi o variabilă de date, nu o funcție.

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

Acest exercițiu face parte din cursul

Programare orientată pe obiecte cu S3 și R6 în R

Vezi cursul

Instrucțiuni pentru exercițiu

O clasă pentru un cuptor cu microunde a fost parțial definită pentru tine.

  • Extinde definiția clasei cuptorului cu microunde pentru a include un element active de tip listă.
  • Adaugă o legătură activă în elementul active pentru a controla nivelul de putere.
    • Funcția trebuie să se numească power_level_watts.
    • Trebuie să accepte un singur argument numit value.
    • Variabila privată de citit/setat se numește ..power_level_watts.
    • Folosește assert_is_a_number() (docs) pentru a verifica că value este un număr simplu.
    • Folosește assert_all_are_in_closed_range() (docs) pentru a verifica că value se află între 0 și ..power_rating_watts.
  • Creează un obiect cuptor cu microunde și atribuie-l variabilei a_microwave_oven.
  • Citește nivelul de putere.
  • Încearcă să setezi nivelul de putere la valoarea "400", ca șir de caractere.
  • Încearcă să setezi nivelul de putere la 1600.
  • Setează nivelul de putere la 400.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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
___ <- ___
Editează și rulează codul