1. Učit se
  2. /
  3. Kurzy
  4. /
  5. Objektově orientované programování s S3 a R6 v R

Connected

Cvičení

Konec (R6 objektu)

Stejně jako R6 třída může definovat veřejnou metodu initialize() pro spuštění vlastního kódu při vytváření objektů, může také definovat veřejnou metodu finalize() pro spuštění vlastního kódu při jejich zničení. finalize() by neměla přijímat žádné argumenty. Obvykle se používá k uzavření spojení s databázemi nebo soubory, nebo ke zrušení vedlejších efektů, jako je změna globálních parametrů options() (docs) nebo grafických parametrů par() (docs).

Šablona kódu by měla vypadat takto.

thing_factory <- R6Class(
  "Thing",
  public = list(
    initialize = function(x, y, z) {
      # do something
    },
    finalize = function() {
      # undo something
    }
  )
)

Metoda finalize() se zavolá ve chvíli, kdy objekt odstraní z paměti automatický garbage collector jazyka R. Garbage collection lze vynutit příkazem gc() (docs).

Pokyny 1/2

undefined XP
    1
    2

V tvém pracovním prostoru je předdefinovaná třída MicrowaveOven jako microwave_oven_factory. V pracovním adresáři byla vytvořena SQLite databáze s dobami vaření pro různé druhy potravin. Balíček RSQLite (docs) je načtený.

  • Dokonči definici třídy SmartMicrowaveOven:
    • Třída by měla dědit z microwave_oven_factory.
    • Privátní část by měla obsahovat pole conn, zpočátku nastavené na NULL.
    • Metoda initialize() by se měla připojit k SQLite databázi pomocí dbConnect(SQLite(), "cooking-times.sqlite").
    • Toto připojení by mělo být uloženo v privátním poli conn.
    • Metoda finalize() by měla pomocí message() (docs) zobrazit zprávu "Disconnecting from the cooking times database." a poté se od databáze odpojit pomocí dbDisconnect(private$conn).
  • Vytvoř objekt třídy SmartMicrowaveOven a přiřaď ho do proměnné a_smart_microwave.
  • Zavolej metodu get_cooking_time() s argumentem "soup" pro food.