Repaso: parquímetro
Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 21 de 57.
Desafío
IntermedioCompleta la fábrica make_meter(rate) en Meter.R. rate es el número de minutos que compra un centavo; bloquéalo con lockBinding() dentro de la fábrica para que nunca pueda cambiar. El medidor mantiene los minutos restantes y los centavos pagados como variables privadas y devuelve cuatro funciones:
insert(cents)acepta únicamente 10, 20, 50 o 100 y, de lo contrario, se detiene concoin not accepted; cada moneda añadecents * rateminutos y cuenta para el importe pagado.wait(minutes)permite que pase el tiempo: los minutos restantes disminuyen, pero nunca por debajo de 0. Una espera negativa se detiene contime cannot go back.status()devuelve12 min leftoexpiredcuando no queda tiempo.paid()devuelve los centavos pagados.
Usa call. = FALSE. El código proporcionado lee la tarifa, después las líneas coin 20 o wait 5, e imprime el estado o error: y el mensaje después de cada una. Finalmente imprime el importe pagado e intenta cambiar rate dentro del entorno de la fábrica.
Tu código va en Meter.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
source("Meter.R")
# Código de entrada/salida suministrado: déjalo tal como está
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 = "")
Todas las lecciones de Programación orientada a objetos
1Fundamentos de S3
Trabajar con archivosListas con una claseFunciones constructorasMétodos de impresión y formatoValidadores y auxiliaresRepaso: temperaturas4Encapsulación en R
Cierres como objetosEntornos como objetosFunciones de accesoProtección del estadoRepaso: parquímetro2S3 Genéricos y métodos
Genéricos y UseMethodMétodos predeterminadosMétodos para genéricos baseFundamentos de NextMethodRepaso: áreas de figuras5Clases S4
Definición de clases S4Slots y accesoComprobaciones de validezMétodos showRepaso - Catálogo de productos8Clases de referencia
Definición de clases de referenciaMétodos y actualizaciones de camposSemántica de copiaHerencia y callSuperRepaso: cola de tareas11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de R online