Riepilogo - Parcometro
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 21 di 57.
Sfida
MedioCompleta la fabbrica make_meter(rate) in Meter.R. rate è il numero di minuti che si ottengono con un centesimo; bloccalo con lockBinding() all'interno della fabbrica, così non potrà mai cambiare. Il parchimetro tiene traccia dei minuti rimasti e dei centesimi pagati come variabili private e restituisce quattro funzioni:
insert(cents)accetta solo 10, 20, 50 o 100 e altrimenti si interrompe concoin not accepted; ogni moneta aggiungecents * rateminuti e contribuisce all'importo pagato.wait(minutes)fa passare il tempo: i minuti rimasti diminuiscono, ma non scendono mai sotto 0. Un'attesa negativa si interrompe contime cannot go back.status()restituisce12 min left, oppureexpiredquando non rimane tempo.paid()restituisce i centesimi pagati.
Usa call. = FALSE. Il codice fornito legge la tariffa, poi le righe coin 20 o wait 5 e stampa lo stato oppure error: e il messaggio dopo ciascuna riga. Infine stampa l'importo pagato e prova a modificare rate nell'ambiente della fabbrica.
Il tuo codice va in Meter.R. main.R contiene il codice fornito per input e output e non può essere modificato.
Provalo tu
source("Meter.R")
# Supplied input/output code: keep it as it is
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 = "")
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 libriEsercitati da solo: Compilatore R online