ÎncepețiÎncepe gratuit

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
)

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 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.

Exercițiu interactiv practic

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

# Add an initialize method
microwave_oven_factory <- R6Class(
  "MicrowaveOven",
  private = list(
    power_rating_watts = 800,
    door_is_open = FALSE
  ),
  public = list(
    cook = function(time_seconds) {
      Sys.sleep(time_seconds)
      print("Your food is cooked!")
    },
    open_door = function() {
      private$door_is_open <- TRUE
    },
    close_door = function() {
      private$door_is_open <- FALSE
    },
    # Add initialize() method here
    ___ = ___(___, ___) {
      if(!missing(power_rating_watts)) {
        private$power_rating_watts <- power_rating_watts
      }
      ___
      
      
    }
  )
)

# Make a microwave
a_microwave_oven <- ___
Editează și rulează codul