1. Learn
  2. /
  3. Cursuri
  4. /
  5. Programare orientată pe obiecte cu S3 și R6 în R

Connected

exercițiu

Primul Lucru, Primul Rând

Există o metodă publică specială numită initialize() (observă grafia în engleză americană). Aceasta nu este apelată direct de utilizator, ci este apelată automat la crearea unui obiect, adică atunci când utilizatorul apelează new().

initialize() îți permite să setezi valorile câmpurilor private la crearea unui obiect R6. Tiparul unei funcții initialize() este următorul:

thing_factory <- R6Class(
  "Thing",
  private = list(
    a_field = "a value",
    another_field = 123
  ),
  public = list(
    initialize = function(a_field, another_field) {
      if(!missing(a_field)) {
        private$a_field <- a_field
      }
      if(!missing(another_field)) {
        private$another_field <- another_field
      }
    }
  )
)

Observă utilizarea funcției missing() (docs). Aceasta returnează TRUE dacă un argument nu a fost transmis în apelul funcției.

Argumentele transmise metodei new() a fabricii sunt redirecționate către initialize().

a_thing <- thing_factory$new(
  a_field = "a different value", 
  another_field = 456
)

Instrucțiuni

100 XP

O fabrică de cuptoare cu microunde a fost parțial definită pentru tine.

  • Adaugă o metodă publică numită initialize(). Aceasta ar trebui să îi permită utilizatorului să seteze câmpurile power_rating_watts și door_is_open la crearea obiectului.
    • Argumentele ar trebui să fie power_rating_watts și door_is_open.
    • În corpul metodei initialize(), pentru fiecare argument, dacă acesta nu este missing() (docs), atunci câmpul privat corespunzător trebuie setat.
  • Creează un obiect cuptor cu microunde cu o putere de 650 wați și cu ușa deschisă.
    • Apelează metoda new() a fabricii microwave_oven_factory.
    • Transmite argumentele power_rating_watts = 650 și door_is_open = TRUE metodei new().
    • Atribuie rezultatul variabilei a_microwave_oven.