Comece agoraComece grátis

Este é o fim (de um objeto R6)

Assim como uma classe R6 pode definir um método público initialize() para executar código personalizado quando objetos são criados, ela também pode definir um método público finalize() para executar código personalizado quando objetos são destruídos. finalize() não deve receber argumentos. Ele é geralmente usado para fechar conexões com bancos de dados ou arquivos, ou desfazer efeitos colaterais, como alterações em options() globais (docs) ou parâmetros gráficos par() (docs).

O modelo de código deve ser o seguinte.

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

O método finalize() é chamado quando o objeto é removido da memória pelo coletor de lixo automático do R. Você pode forçar uma coleta de lixo digitando gc() (docs).

Este exercicio faz parte do curso

Programação Orientada a Objetos com S3 e R6 em R

Ver curso

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

# 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
___
Editar e Executar Código