Konec (R6 objektu)
Stejně jako R6 třída může definovat veřejnou metodu initialize() pro spuštění vlastního kódu při vytváření objektů, může také definovat veřejnou metodu finalize() pro spuštění vlastního kódu při jejich zničení. finalize() by neměla přijímat žádné argumenty. Obvykle se používá k uzavření spojení s databázemi nebo soubory, nebo ke zrušení vedlejších efektů, jako je změna globálních parametrů options() (docs) nebo grafických parametrů par() (docs).
Šablona kódu by měla vypadat takto.
thing_factory <- R6Class(
"Thing",
public = list(
initialize = function(x, y, z) {
# do something
},
finalize = function() {
# undo something
}
)
)
Metoda finalize() se zavolá ve chvíli, kdy objekt odstraní z paměti automatický garbage collector jazyka R. Garbage collection lze vynutit příkazem gc() (docs).
Toto cvičení je součástí kurzu
Objektově orientované programování s S3 a R6 v R
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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
___