ÎncepețiÎncepe gratuit

Citește Ratingul

Datele stocate de un obiect R6 sunt ascunse în mod deliberat față de utilizator, prin păstrarea lor în elementul private. Acesta este principiul încapsulării.

Dacă vrei să oferi acces la oricare dintre valorile de date, poți folosi un active binding. Acestea sunt funcții care se comportă ca variabile.

Active binding-urile sunt stocate în elementul active al unui obiect R6. Pentru a crea un active binding care să ofere acces la un câmp de date privat (adică un binding „doar pentru citire"), creezi o funcție fără argumente care returnează pur și simplu elementul privat.

Pattern-ul pentru crearea unui active binding doar pentru citire este următorul:

thing_factory <- R6Class(
  "Thing",
  private = list(
    ..a_field = "a value"
  ),
  active = list(
    a_field = function() {
      private$..a_field
    }
  )
)

Active binding-ul se apelează ca o variabilă de date, nu ca o funcție.

a_thing <- thing_factory$new()
a_thing$a_field   # not a_thing$a_field()

Acest exercițiu face parte din cursul

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

Vezi cursul

Instrucțiuni pentru exercițiu

Un factory pentru cuptoare cu microunde a fost definit parțial pentru tine.

  • Actualizează definiția pentru a include un active binding doar pentru citire, care să returneze puterea nominală.
    • Active binding-ul trebuie să se numească power_rating_watts.
    • Acesta este definit ca o funcție, fără argumente.
    • Corpul funcției trebuie să returneze pur și simplu câmpul privat ..power_rating_watts.
  • Creează un obiect cuptor cu microunde și atribuie-l variabilei a_microwave_oven.
  • Citește puterea sa nominală.

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
  ),
  active = list(
    # Add the binding here
    ___ = ___

    
  )
)

# Make a microwave 
a_microwave_oven <- ___

# Get the power rating
___
Editează și rulează codul