Inizia subitoInizia gratis

Questo è la fine (di un oggetto R6)

Così come una classe R6 può definire un metodo pubblico initialize() per eseguire codice personalizzato quando gli oggetti vengono creati, può anche definire un metodo pubblico finalize() per eseguire codice personalizzato quando gli oggetti vengono distrutti. finalize() non deve accettare argomenti. In genere si usa per chiudere connessioni a database o a file, o per annullare effetti collaterali come modifiche alle options() globali (docs) o ai parametri grafici par() (docs).

Il modello di codice è il seguente.

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

Il metodo finalize() viene chiamato quando l'oggetto viene rimosso dalla memoria dal garbage collector automatico di R. Puoi forzare una garbage collection digitando gc() (docs).

Questo esercizio fa parte del corso

Programmazione orientata agli oggetti con S3 e R6 in R

Visualizza corso

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

# 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
___
Modifica ed esegui il codice