Este es el final (de un objeto R6)
Al igual que una clase R6 puede definir un método público initialize() para ejecutar código personalizado cuando se crean objetos, también puede definir un método público finalize() para ejecutar código personalizado cuando se destruyen. finalize() no debe recibir argumentos. Suele usarse para cerrar conexiones a bases de datos o archivos, o deshacer efectos secundarios como cambios en las options() globales (docs) o los parámetros de gráficos par() (docs).
La plantilla del código sería la siguiente.
thing_factory <- R6Class(
"Thing",
public = list(
initialize = function(x, y, z) {
# do something
},
finalize = function() {
# undo something
}
)
)
El método finalize() se llama cuando el recolector de basura automático de R elimina el objeto de la memoria. Puedes forzar una recolección de basura escribiendo gc() (docs).
Este ejercicio forma parte del curso
Programación orientada a objetos con S3 y R6 en R
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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
___