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
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âmpurilepower_rating_wattsșidoor_is_openla crearea obiectului.- Argumentele ar trebui să fie
power_rating_wattsșidoor_is_open. - În corpul metodei
initialize(), pentru fiecare argument, dacă acesta nu estemissing()(docs), atunci câmpul privat corespunzător trebuie setat.
- Argumentele ar trebui să fie
- Creează un obiect cuptor cu microunde cu o putere de
650wați și cu ușa deschisă.- Apelează metoda
new()a fabriciimicrowave_oven_factory. - Transmite argumentele
power_rating_watts = 650șidoor_is_open = TRUEmetodeinew(). - Atribuie rezultatul variabilei
a_microwave_oven.
- Apelează metoda
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 <- ___