Ôn tập: tiền và tiền tệ
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 31 trên 57.
Thử thách
Trung bìnhTạo một thư viện tiền tệ nhỏ trong hai tệp.
Money.R: lớpMoney(các slotamount,currency) với quy tắc hợp lệcurrency must be 3 capital letters(kiểm tra bằnggrepl("^[A-Z]{3}$", ...)); phương thứcshow()in ra12.50 EURvà một dòng mới; toán tử+cho hai đối tượngMoney, báo lỗicannot add EUR and USD(dùngcall. = FALSE); vàArithchoMoneycùng một số, dùngcallGeneric().Convert.R: hàm genericconvert(m, to, rates)với một phương thức chosignature("Money", "character"), chuyển đổi dựa trên tỷ giá, cho biết cần bao nhiêu đơn vị của mỗi loại tiền tệ để đổi lấy 1 EUR: 11 USD bằng 10 EUR.
Code được cung cấp lưu một ví tiền và đọc các lệnh add 10 EUR, sum (cộng toàn bộ ví tiền), convert 2 USD (mục thứ hai) hoặc double 1, rồi in từng kết quả hoặc error: cùng thông báo lỗi.
Code của bạn nằm trong Money.R và Convert.R. 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("Money.R")
source("Convert.R")
# Đoạn code đầu vào/đầu ra đã cho: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
rates <- c(EUR = 1, USD = 1.1, GBP = 0.85)
wallet <- list()
for (line in input) {
p <- strsplit(line, " ")[[1]]
out <- tryCatch({
if (p[1] == "add") {
m <- new("Money", amount = as.numeric(p[2]), currency = p[3])
wallet[[length(wallet) + 1]] <- m
print(m)
} else if (p[1] == "sum") {
print(Reduce(`+`, wallet))
} else if (p[1] == "convert") {
print(convert(wallet[[as.numeric(p[2])]], p[3], rates))
} else if (p[1] == "double") {
print(wallet[[as.numeric(p[2])]] * 2)
}
}, error = function(e) cat("error: ", sub(".*object: ", "", conditionMessage(e)), "\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ẩm3S3 Tính kế thừa
Vector lớpThứ tự tra cứu phương thứcMở rộng với NextMethodKiểm tra với inherits()Ôn tập, tính lương nhân viên6S4 Generics và phương thức
Tạo GenericsPhương thức cho kiểu dựng sẵnĐiều phối theo hai đối sốsetValidity và validObjectÔn tập: tiền và tiền tệTự luyện tập: Trình biên dịch R online