Bắt đầu ngayBắt đầu miễn phí

Kết thúc (vòng đời của một đối tượng R6)

Cũng giống như một lớp R6 có thể định nghĩa phương thức initialize() công khai để chạy mã tùy chỉnh khi đối tượng được tạo, lớp đó cũng có thể định nghĩa phương thức finalize() công khai để chạy mã tùy chỉnh khi đối tượng bị hủy. finalize() không nhận đối số nào. Phương thức này thường dùng để đóng kết nối tới cơ sở dữ liệu hoặc tệp, hoặc hoàn tác các tác dụng phụ như thay đổi options() toàn cục (tài liệu) hay các tham số đồ họa par() (tài liệu).

Mẫu mã như sau.

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

Phương thức finalize() sẽ được gọi khi đối tượng bị loại bỏ khỏi bộ nhớ bởi bộ gom rác tự động của R. Bạn có thể ép gom rác bằng cách gõ gc() (tài liệu).

Bài tập này là một phần của khóa học

Lập trình hướng đối tượng với S3 và R6 trong R

Xem khóa học

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# 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
___
Chỉnh sửa và Chạy Mã