Kom igångKom igång gratis

Det här är slutet (på ett R6-objekt)

Precis som en R6-klass kan definiera en publik metod initialize() för att köra anpassad kod när objekt skapas, kan den också definiera en publik metod finalize() för att köra anpassad kod när objekt förstörs. finalize() ska inte ta några argument. Metoden används vanligtvis för att stänga anslutningar till databaser eller filer, eller ångra sidoeffekter som att ändra globala options()-parametrar (docs) eller grafikparametrar via par() (docs).

Mallen för koden ser ut så här.

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

Metoden finalize() anropas när objektet tas bort från minnet av R:s automatiska skräpinsamlare. Du kan tvinga fram en skräpinsamling genom att skriva gc() (docs).

Den här övningen är en del av kursen

Objektorienterad programmering med S3 och R6 i R

Visa kurs

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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
___
Redigera och kör kod