Rangkuman: Uang dan Mata Uang
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 31 dari 57.
Tantangan
SedangBuat library uang sederhana dalam dua file.
Money.R: classMoney(slotamount,currency) dengan aturan validitascurrency must be 3 capital letters(periksa dengangrepl("^[A-Z]{3}$", ...)); methodshow()yang mencetak12.50 EURdan baris baru;+untuk dua objectMoneyyang menghasilkan errorcannot add EUR and USD(gunakancall. = FALSE); danArithuntukMoneydan angka dengancallGeneric().Convert.R: genericconvert(m, to, rates)dengan method untuksignature("Money", "character")yang mengonversi melalui rates, yang menyatakan berapa banyak unit setiap mata uang setara dengan 1 EUR: 11 USD setara dengan 10 EUR.
Code yang disediakan menyimpan wallet dan membaca perintah add 10 EUR, sum (menjumlahkan seluruh wallet), convert 2 USD (item kedua), atau double 1, lalu mencetak setiap hasil atau error: dan pesannya.
Tulis kodemu di Money.R dan Convert.R. main.R berisi code input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Money.R")
source("Convert.R")
# Kode input/output yang disediakan: biarkan apa adanya
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 = ""))
}
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar S3
Bekerja dengan fileList dengan classFungsi KonstruktorMethod print dan formatValidator dan helperUlasan: Suhu4Enkapsulasi di R
Closure sebagai objectEnvironment sebagai objectFungsi accessorMelindungi stateRangkuman: Meter Parkir2S3 Generics dan Method
Generics dan UseMethodMethod DefaultMethod untuk Base GenericsDasar-Dasar NextMethodRekap: Luas Bangun5S4 class
Mendefinisikan class S4Slots dan AksesPemeriksaan ValiditasMethod showRingkasan: Katalog Produk8Kelas Referensi
Mendefinisikan Kelas ReferensiPembaruan method dan fieldSemantik PenyalinanPewarisan dan callSuperRangkuman: Antrean Tugas11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Pewarisan S3
Vektor classUrutan Pencarian methodMemperluas dengan NextMethodMemeriksa dengan inherits()Ulasan: Penggajian Staf6S4 Generik dan method
Membuat Generikmethod untuk Fitur BawaanDispatch Berdasarkan Dua ArgumensetValidity dan validObjectRangkuman: Uang dan Mata UangLatihan sendiri: Compiler R online