Đ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")
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
Hướng dẫn bài tập
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 travaluelà một số đơn. - Dùng
assert_all_are_in_closed_range()(docs) để kiểm travaluenằm trong khoảng từ0đến..power_rating_watts.
- Hàm nên có tên
- 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.
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.
# Add a binding for power rating
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
..power_rating_watts = 800,
..power_level_watts = 800
),
# Add active list containing an active binding
___ = ___(
___ = ___(___) {
if(missing(___)) {
# Return the private value
___
} else {
# Assert that value is a number
___
# Assert that value is in a closed range from 0 to power rating
___
# Set the private power level to value
___ <- ___
}
}
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power level
___
# Try to set the power level to "400"
___ <- ___
# Try to set the power level to 1600 watts
___ <- ___
# Set the power level to 400 watts
___ <- ___