Aan de slagGa gratis aan de slag

Dit is het einde (van een R6-object)

Net zoals een R6-klasse een publieke initialize()-methode kan definiëren om aangepaste code uit te voeren wanneer objecten worden gemaakt, kan ze ook een publieke finalize()-methode definiëren om aangepaste code uit te voeren wanneer objecten worden vernietigd. finalize() mag geen argumenten hebben. Deze methode wordt meestal gebruikt om verbindingen met databases of bestanden te sluiten, of om bijwerkingen ongedaan te maken, zoals het wijzigen van globale options() (docs) of grafische par()-parameters (docs).

De sjabloon voor de code ziet er als volgt uit.

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

De finalize()-methode wordt aangeroepen wanneer het object uit het geheugen wordt verwijderd door R's automatische garbage collector. Je kunt een garbage collection afdwingen door gc() te typen (docs).

Deze oefening maakt deel uit van de cursus

Objectgeoriënteerd programmeren met S3 en R6 in R

Cursus bekijken

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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
___
Code bewerken en uitvoeren