Riepilogo - Denaro e valuta
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 31 di 57.
Sfida
MedioCrea una piccola libreria per gestire il denaro in due file.
Money.R: la classeMoney(slotamount,currency) con una regola di validitàcurrency must be 3 capital letters(controlla congrepl("^[A-Z]{3}$", ...)); un metodoshow()che stampa12.50 EURe una nuova riga;+per due oggettiMoneyche si interrompe concannot add EUR and USD(usacall. = FALSE); eArithperMoneye un numero concallGeneric().Convert.R: il genericoconvert(m, to, rates)con un metodo persignature("Money", "character")che converte usando i tassi, i quali indicano quante unità di ciascuna valuta equivalgono a 1 EUR: 11 USD equivalgono a 10 EUR.
Il codice fornito mantiene un portafoglio e legge i comandi add 10 EUR, sum (somma l'intero portafoglio), convert 2 USD (il secondo elemento) oppure double 1, stampando ogni risultato oppure error: e il messaggio.
Il tuo codice va in Money.R e Convert.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Money.R")
source("Convert.R")
# Codice di input/output fornito: lascialo così com'è
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 = ""))
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Nozioni di base su S3
Lavorare con i fileListe con una classeFunzioni costruttriciMetodi di stampa e formattazioneValidatori e funzioni di supportoRipasso - Temperature4Incapsulamento in R
Chiusure come oggettiAmbienti come oggettiFunzioni di accessoProteggere lo statoRiepilogo - Parcometro2Generics e metodi S3
Generics e UseMethodMetodi predefinitiMetodi per i generics di baseNozioni di base su NextMethodRiepilogo - Aree delle forme5Classi S4
Definire le classi S4Slot e accessoControlli di validitàMetodi showRiepilogo - Catalogo prodotti8Classi di riferimento
Definizione delle classi di riferimentoMetodi e aggiornamenti dei campiSemantica della copiaEreditarietà e callSuperRiepilogo - coda di attività11Progetto: Gestione della biblioteca
Libri e iscrittiPrestito dei libri3Ereditarietà S3
Vettori di classeOrdine di ricerca dei metodiEstendere con NextMethodVerificare con inherits()Riepilogo - Retribuzioni del personale6Generici e metodi S4
Creare genericiMetodi per gli elementi integratiDispatch su due argomentisetValidity e validObjectRiepilogo - Denaro e valutaEsercitati da solo: Compilatore R online