MulaiMulai sekarang secara gratis

Ini Akhirnya (dari sebuah Objek R6)

Sama seperti sebuah kelas R6 dapat mendefinisikan metode publik initialize() untuk menjalankan kode kustom saat objek dibuat, kelas tersebut juga dapat mendefinisikan metode publik finalize() untuk menjalankan kode kustom saat objek dimusnahkan. finalize() tidak boleh menerima argumen. Metode ini biasanya digunakan untuk menutup koneksi ke basis data atau berkas, atau membatalkan efek samping seperti mengubah options() global (docs) atau parameter grafis par() (docs).

Templat kodenya adalah sebagai berikut.

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

Metode finalize() dipanggil saat objek dihapus dari memori oleh pengumpul sampah otomatis R. Anda dapat memaksa proses pengumpulan sampah dengan mengetik gc() (docs).

Latihan ini adalah bagian dari kursus

Pemrograman Berorientasi Objek dengan S3 dan R6 di R

Lihat Kursus

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

# 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
___
Edit dan Jalankan Kode