ÎncepețiÎncepe gratuit

Sfârșitul (unui obiect R6)

La fel cum o clasă R6 poate defini o metodă publică initialize() pentru a rula cod personalizat la crearea obiectelor, aceasta poate defini și o metodă publică finalize() pentru a rula cod personalizat la distrugerea obiectelor. finalize() nu ar trebui să primească argumente. Este folosită în mod obișnuit pentru a închide conexiuni la baze de date sau fișiere, ori pentru a anula efecte secundare, cum ar fi modificarea parametrilor globali options() (docs) sau a parametrilor grafici par() (docs).

Șablonul de cod ar trebui să arate astfel.

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

Metoda finalize() este apelată atunci când obiectul este eliminat din memorie de colectorul automat de gunoi al R. Poți forța o colectare a gunoiului tastând gc() (docs).

Acest exercițiu face parte din cursul

Programare orientată pe obiecte cu S3 și R6 în R

Vezi cursul

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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
___
Editează și rulează codul