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

Điều khiển công suất

Active binding cũng có thể dùng để gán cho các trường private. Trong trường hợp này, hàm binding nên nhận một đối số duy nhất tên là "value".

Mẫu tạo một active binding đọc/ghi như sau.

thing_factory <- R6Class(
  "Thing",
  private = list(
    ..a_field = "a value"
  ),
  active = list(
    a_field = function(value) {
      if(missing(value)) {
        private$..a_field
      } else {
        assert_is_a_string(value) # hoặc một kiểm tra (assertion) khác
        private$..a_field <- value
      }
    }
  )
)

Giá trị được gán như thể binding là một biến dữ liệu, không phải một hàm.

a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # không phải a_thing$a_field("a new value")

Hướng dẫn

100 XP

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

  • Mở rộng định nghĩa lớp lò vi sóng để bổ sung phần tử danh sách active.
  • Thêm một active binding vào phần tử active để điều khiển mức công suất.
    • Hàm nên có tên power_level_watts.
    • Hàm nên nhận một đối số duy nhất tên value.
    • Biến private để get/set có tên ..power_level_watts.
    • Dùng assert_is_a_number() (docs) để kiểm tra value là một số đơn.
    • Dùng assert_all_are_in_closed_range() (docs) để kiểm tra value nằm trong khoảng từ 0 đến ..power_rating_watts.
  • Tạo một đối tượng lò vi sóng và gán vào a_microwave_oven.
  • Lấy mức công suất hiện tại.
  • Thử gán mức công suất bằng giá trị "400", dưới dạng chuỗi.
  • Thử gán mức công suất bằng 1600.
  • Gán mức công suất bằng 400.