Özet - Para ve Para Birimi
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 31 / 57.
Görev
Ortaİki dosyada küçük bir para birimi kütüphanesi oluşturun.
Money.R: geçerlilik kuralıcurrency must be 3 capital lettersolan (amount,currencyyuvalarına sahip)Moneysınıfı (grepl("^[A-Z]{3}$", ...)ile denetleyin);12.50 EURve yeni satır yazdıran birshow()yöntemi;call. = FALSEkullanarak ikiMoneynesnesinin toplanmasını sağlayan vecannot add EUR and USDmesajıyla işlemi durduran+; ayrıcaMoneyve bir sayı içincallGeneric()kullananArith.Convert.R: her para biriminden kaç birimin 1 EUR ettiğini belirten kurlar üzerinden dönüşüm yapan,signature("Money", "character")imzasına sahip bir yöntem içerenconvert(m, to, rates)genel işlevi: 11 USD, 10 EUR eder.
Sağlanan kod bir cüzdanı tutar ve add 10 EUR, sum (cüzdanın tamamını toplar), convert 2 USD (ikinci öğe) veya double 1 komutlarını okur; her sonucu ya da error: ile mesajı yazdırır.
Kodunuz Money.R ve Convert.R dosyalarına gider. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Money.R")
source("Convert.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakı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 = ""))
}
Nesne Tabanlı Programlama bölümündeki tüm dersler
1S3 Temelleri
Dosyalarla ÇalışmaSınıf ile ListelerYapıcı FonksiyonlarPrint ve Format MetotlarıDoğrulayıcılar ve YardımcılarTekrar - Sıcaklıklar4R'da Kapsülleme
Nesne Olarak Closure'larNesne Olarak OrtamlarErişimci FonksiyonlarDurumu KorumaÖzet - Parkmetre2S3 Generic'leri ve Metotları
Generic'ler ve UseMethodVarsayılan MetotlarTemel Generic'ler için MetotlarNextMethod TemelleriTekrar - Şekil Alanları5S4 Sınıfları
S4 Sınıflarını TanımlamaSlotlar ve ErişimGeçerlilik KontrolleriShow MetotlarıÖzet - Ürün Kataloğu8Referans Sınıfları
Referans Sınıflarını TanımlamaMetotlar ve Alan GüncellemeleriKopyalama SemantiğiKalıtım ve callSuperÖzet - Görev Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3S3 Kalıtımı
Sınıf VektörleriMetot Arama SırasıNextMethod ile Genişletmeinherits() ile DenetlemeÖzet - Personel Bordrosu6S4 Generic'leri ve Metotlar
Generic'ler OluşturmaYerleşik İşlevler için Metotlarİki Argümana Göre GönderimsetValidity ve validObjectÖzet - Para ve Para BirimiKendi başına pratik yap: Online R derleyicisi