CommencezCommencez gratuitement

C'est la fin (d'un objet R6)

Tout comme une classe R6 peut définir une méthode publique initialize() pour exécuter du code personnalisé lors de la création d'objets, elle peut aussi définir une méthode publique finalize() pour exécuter du code personnalisé lorsque des objets sont détruits. finalize() ne doit prendre aucun argument. On l'utilise généralement pour fermer des connexions à des bases de données ou à des fichiers, ou pour annuler des effets de bord comme la modification des options() globales (docs) ou des paramètres graphiques par() (docs).

Le canevas de code devrait être le suivant.

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

La méthode finalize() est appelée lorsque l'objet est retiré de la mémoire par le récupérateur de mémoire automatique de R. Vous pouvez forcer une récupération de mémoire en tapant gc() (docs).

Cette activité fait partie du cours

Programmation orientée objet avec S3 et R6 en R

Voir le cours

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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
___
Modifier et exécuter le code