1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Lập trình hướng đối tượng với S3 và R6 trong R

Connected

Bài tập

Bắt đầu từ điều quan trọng nhất

Có một phương thức công khai đặc biệt tên là initialize() (lưu ý cách viết theo tiếng Anh Mỹ). Phương thức này không được người dùng gọi trực tiếp. Thay vào đó, nó được tự động gọi khi một đối tượng được tạo; tức là khi người dùng gọi new().

initialize() cho phép bạn đặt giá trị cho các private field khi tạo một đối tượng R6. Mẫu của một hàm initialize() như sau:

thing_factory <- R6Class(
  "Thing",
  private = list(
    a_field = "a value",
    another_field = 123
  ),
  public = list(
    initialize = function(a_field, another_field) {
      if(!missing(a_field)) {
        private$a_field <- a_field
      }
      if(!missing(another_field)) {
        private$another_field <- another_field
      }
    }
  )
)

Lưu ý cách dùng missing() (docs). Hàm này trả về TRUE nếu một đối số không được truyền trong lời gọi hàm.

Các đối số truyền cho phương thức new() của factory sẽ được chuyển cho initialize().

a_thing <- thing_factory$new(
  a_field = "a different value", 
  another_field = 456
)

Hướng dẫn

100 XP

Một factory cho lò vi sóng đã được định nghĩa một phần cho bạn.

  • Thêm một phương thức public tên initialize(). Phương thức này cần cho phép người dùng đặt các field power_rating_watts và door_is_open khi đối tượng được tạo.
    • Các đối số nên là power_rating_watts và door_is_open.
    • Trong thân phương thức initialize(), với mỗi đối số, nếu nó không missing() (docs), thì gán vào private field tương ứng.
  • Tạo một đối tượng lò vi sóng với công suất 650 watt và cửa đang mở.
    • Gọi phương thức new() của microwave_oven_factory.
    • Truyền các đối số power_rating_watts = 650 và door_is_open = TRUE vào new().
    • Gán kết quả cho a_microwave_oven.