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

Lộ diện lớp Cha của bạn

Mặc định, các lớp R6 chỉ có quyền truy cập vào chức năng của lớp cha trực tiếp. Để cho phép truy cập qua nhiều thế hệ, các lớp trung gian cần định nghĩa một active binding để lộ (expose) lớp cha của chúng. Cú pháp như sau

active = list(
  super_ = function() super
)

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

Hướng dẫn bài tập

Một lớp lò vi sóng đã được định nghĩa sẵn trong workspace của bạn.

  • Mở rộng lớp lò vi sóng cao cấp bằng cách thêm một phần tử danh sách active.
  • Thêm một active binding để lộ chức năng của lớp cha.
    • Binding nên được đặt tên là super_.
    • Đây phải là một hàm không nhận đối số và chỉ trả về super.
  • Khởi tạo một đối tượng lò vi sóng cao cấp và gán vào a_fancy_microwave.
  • Gọi binding super_ của lò vi sóng cao cấp.

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.

# Expose the parent functionality
fancy_microwave_oven_factory <- R6Class(
  "FancyMicrowaveOven",
  inherit = microwave_oven_factory,
  public = list(
    cook_baked_potato = function() {
      self$cook(3)
    },
    cook = function(time_seconds) {
      super$cook(time_seconds)
      message("Enjoy your dinner!")
    }
  ),
  # Add an active element with a super_ binding
  ___ = ___(
    ___ = ___
  )
)

# Instantiate a fancy microwave
a_fancy_microwave <- ___

# Call the super_ binding
___
Chỉnh sửa và Chạy Mã