Ôn tập: đồng hồ tính phí đỗ xe
Thuộc phần Lập trình hướng đối tượng trong hành trình R của Coddy. Bài học 21 trên 57.
Thử thách
Trung bìnhHoàn thiện nhà máy make_meter(rate) trong Meter.R. rate là số phút mà mỗi xu mua được; hãy khóa nó bằng lockBinding() bên trong nhà máy để giá trị này không thể thay đổi. Đồng hồ tính số phút còn lại và số xu đã trả bằng các biến riêng tư, rồi trả về bốn hàm:
insert(cents)chỉ chấp nhận 10, 20, 50 hoặc 100, nếu không sẽ dừng với thông báocoin not accepted; mỗi đồng xu cộng thêmcents * ratephút và được tính vào số tiền đã trả.wait(minutes)cho thời gian trôi qua: số phút còn lại giảm xuống nhưng không bao giờ thấp hơn 0. Nếu thời gian chờ là số âm, hàm sẽ dừng với thông báotime cannot go back.status()trả về12 min left, hoặcexpiredkhi không còn thời gian.paid()trả về số xu đã trả.
Dùng call. = FALSE. Code được cung cấp đọc giá trị rate, sau đó đọc các dòng coin 20 hoặc wait 5, rồi in trạng thái hoặc error: cùng thông báo sau mỗi dòng. Cuối cùng, code in số tiền đã trả và thử thay đổi rate trong môi trường của nhà máy.
Viết code của bạn trong Meter.R. Tệp main.R chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
source("Meter.R")
# Đoạn code đầu vào/đầu ra đã có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
meter <- make_meter(as.numeric(input[1]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
msg <- tryCatch({
if (p[1] == "coin") meter$insert(as.numeric(p[2]))
if (p[1] == "wait") meter$wait(as.numeric(p[2]))
meter$status()
}, error = function(e) paste("error:", conditionMessage(e)))
cat(line, ": ", msg, "\n", sep = "")
}
cat("paid: ", meter$paid(), " cents\n", sep = "")
r <- tryCatch({ environment(meter$insert)$rate <- 0; "rate changed" }, error = function(e) "rate is locked")
cat(r, "\n", sep = "")
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về S3
Làm việc với tệpDanh sách với một lớpHàm khởi tạoPhương thức in ra và định dạngTrình xác thực và hàm hỗ trợÔn tập: nhiệt độ4Tính đóng gói trong R
Closure dưới dạng đối tượngMôi trường dưới dạng đối tượngHàm truy cậpBảo vệ trạng tháiÔn tập: đồng hồ tính phí đỗ xe2S3, hàm generic và phương thức
Hàm generic và UseMethodPhương thức mặc địnhPhương thức cho hàm generic cơ sởCơ bản về NextMethodÔn tập: diện tích hình5Các lớp S4
Định nghĩa lớp S4Slot và quyền truy cậpKiểm tra tính hợp lệPhương thức showÔn tập: Danh mục sản phẩmTự luyện tập: Trình biên dịch R online