Repaso: dinero y moneda
Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 31 de 57.
Desafío
IntermedioConstruye una pequeña biblioteca de dinero en dos archivos.
Money.R: la claseMoney(ranurasamount,currency) con una regla de validezcurrency must be 3 capital letters(compruébala congrepl("^[A-Z]{3}$", ...)); un métodoshow()que imprima12.50 EURy una nueva línea;+para dos objetosMoneyque se detenga concannot add EUR and USD(usacall. = FALSE); yArithparaMoneyy un número concallGeneric().Convert.R: el genéricoconvert(m, to, rates)con un método parasignature("Money", "character")que convierta mediante las tasas, las cuales indican cuántas unidades de cada moneda equivalen a 1 EUR: 11 USD equivalen a 10 EUR.
El código proporcionado mantiene una cartera y lee los comandos add 10 EUR, sum (suma toda la cartera), convert 2 USD (el segundo elemento) o double 1, e imprime cada resultado o error: y el mensaje.
Tu código va en Money.R y Convert.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
source("Money.R")
source("Convert.R")
# Código de entrada/salida suministrado: déjalo tal como está
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 = ""))
}
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 libros3Herencia en S3
Vectores de claseOrden de búsqueda de métodosExtensión con NextMethodComprobación con inherits()Repaso - Nómina del personal6S4 Genéricos y métodos
Creación de genéricosMétodos para funciones incorporadasDespacho sobre dos argumentossetValidity y validObjectRepaso: dinero y monedaPractica por tu cuenta: Compilador de R online