Menu
Coddy logo textTech

Özet - Para ve Para Birimi

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 31 / 57.

challenge icon

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 letters olan ( amount, currency yuvalarına sahip) Money sınıfı ( grepl("^[A-Z]{3}$", ...) ile denetleyin); 12.50 EUR ve yeni satır yazdıran bir show() yöntemi; call. = FALSE kullanarak iki Money nesnesinin toplanmasını sağlayan ve cannot add EUR and USD mesajıyla işlemi durduran +; ayrıca Money ve bir sayı için callGeneric() kullanan Arith.
  • 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çeren convert(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

Kendi başına pratik yap: Online R derleyicisi