Zacznij terazZacznij za darmo

To już koniec (obiektu R6)

Podobnie jak klasa R6 może definiować publiczną metodę initialize(), która uruchamia niestandardowy kod podczas tworzenia obiektów, może też definiować publiczną metodę finalize(), uruchamianą podczas ich usuwania. Metoda finalize() nie przyjmuje żadnych argumentów. Zazwyczaj używa się jej do zamykania połączeń z bazami danych lub plikami albo do cofania efektów ubocznych – na przykład zmian globalnych parametrów options() (dokumentacja) lub parametrów graficznych par() (dokumentacja).

Szablon kodu wygląda następująco.

thing_factory <- R6Class(
  "Thing",
  public = list(
    initialize = function(x, y, z) {
      # zrób coś
    },
    finalize = function() {
      # cofnij coś
    }
  )
)

Metoda finalize() jest wywoływana, gdy obiekt zostaje usunięty z pamięci przez automatyczny mechanizm odśmiecania (garbage collector) języka R. Możesz wymusić odśmiecanie, wywołując gc() (dokumentacja).

To ćwiczenie jest częścią kursu

Programowanie obiektowe z S3 i R6 w R

Zobacz kurs

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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
___
Edytuj i uruchom kod