LoslegenKostenlos loslegen

This is the End (of an R6 Object)

So wie eine R6-Klasse eine öffentliche Methode initialize() definieren kann, um benutzerdefinierten Code beim Erzeugen von Objekten auszuführen, kann sie auch eine öffentliche Methode finalize() definieren, um benutzerdefinierten Code beim Zerstören von Objekten auszuführen. finalize() darf keine Argumente annehmen. Typische Anwendungsfälle sind das Schließen von Verbindungen zu Datenbanken oder Dateien oder das Rückgängig machen von Seiteneffekten, etwa geänderte globale options() (Docs) oder Grafikparameter par() (Docs).

Die Vorlage für den Code sieht so aus.

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

Die Methode finalize() wird aufgerufen, wenn das Objekt vom automatischen Garbage Collector von R aus dem Speicher entfernt wird. Du kannst eine Garbage Collection erzwingen, indem du gc() (Docs) eingibst.

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung mit S3 und R6 in R

Kurs anzeigen

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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 bearbeiten und ausführen