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 des objets, elle peut aussi définir une méthode publique finalize() pour exécuter du code personnalisé lors de la destruction des objets. finalize() ne doit prendre aucun argument. Elle sert généralement à fermer des connexions à des bases de données ou à des fichiers, ou à annuler des effets de bord, comme des modifications aux options() globales (docs) ou aux paramètres graphiques par() (docs).
Le modèle de code est le suivant.
thing_factory <- R6Class(
"Thing",
public = list(
initialize = function(x, y, z) {
# faire quelque chose
},
finalize = function() {
# annuler quelque chose
}
)
)
La méthode finalize() est appelée lorsque l’objet est retiré de la mémoire par le ramasse-miettes automatique de R. Vous pouvez forcer une collecte de mémoire en tapant gc() (docs).
Cet exercice fait partie du cours
Programmation orientée objet avec S3 et R6 en R
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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
___