Začněte nyníZačněte zdarma

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

Toto cvičení je součástí kurzu

Objektově orientované programování s S3 a R6 v R

Zobrazit kurz

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# Microwave_factory is predefined
microwave_oven_factory

# Complete the class definition
smart_microwave_oven_factory <- R6Class(
  "SmartMicrowaveOven",
  inherit = ___, # Specify inheritance
  private = list(
    # Add a field to store connection
    ___ = ___
  ),
  public = list(
    initialize = function() {
      # Connect to the database
      ___$___ = ___(___(), "___")
    },
    get_cooking_time = function(food) {
      dbGetQuery(
        private$conn,
        sprintf("SELECT time_seconds FROM cooking_times WHERE food = '%s'", food)
      )
    },
    finalize = function() {
      # Print a message
      ___("___")
      # Disconnect from the database
      ___(___$___)
    }
  )
)

# Create a smart microwave object
a_smart_microwave <- ___
  
# Call the get_cooking_time() method
___
Upravit a spustit kód