BaşlayınÜcretsiz başlayın

Bu Son (bir R6 Nesnesinin Sonu)

Nasıl ki bir R6 sınıfı, nesneler oluşturulduğunda özel kod çalıştırmak için herkese açık bir initialize() yöntemi tanımlayabiliyorsa, nesneler yok edilirken özel kod çalıştırmak için de herkese açık bir finalize() yöntemi tanımlayabilir. finalize() herhangi bir argüman almamalıdır. Genellikle veritabanları veya dosyalar ile olan bağlantıları kapatmak ya da genel options() (docs) veya grafik par() (docs) parametrelerini değiştirmek gibi yan etkileri geri almak için kullanılır.

Kod şablonu aşağıdaki gibidir.

thing_factory <- R6Class(
  "Thing",
  public = list(
    initialize = function(x, y, z) {
      # bir şey yap
    },
    finalize = function() {
      # bir şeyi geri al
    }
  )
)

finalize() yöntemi, nesne R'ın otomatik çöp toplayıcısı tarafından bellekten kaldırıldığında çağrılır. Çöp toplamayı gc() (docs) yazarak zorlayabilirsin.

Bu egzersiz, kursun bir parçasıdır

R'de S3 ve R6 ile Nesne Yönelimli Programlama

Kursa Göz Atın

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

# 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
___
Kodu Düzenle ve Çalıştır