Podsumowanie – parkometr
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 21 z 57.
Wyzwanie
ŚredniUzupełnij fabrykę make_meter(rate) w pliku Meter.R. rate to liczba minut, które można kupić za jeden cent; zablokuj ją za pomocą lockBinding() wewnątrz fabryki, aby nigdy nie mogła się zmienić. Licznik przechowuje pozostałe minuty i zapłacone centy jako prywatne zmienne oraz zwraca cztery funkcje:
insert(cents)akceptuje tylko 10, 20, 50 lub 100, a w przeciwnym razie kończy działanie z komunikatemcoin not accepted; każda moneta dodajecents * rateminut i jest wliczana do zapłaconej kwoty.wait(minutes)pozwala upłynąć czasowi: liczba pozostałych minut maleje, ale nigdy nie spada poniżej 0. Ujemny czas oczekiwania kończy działanie z komunikatemtime cannot go back.status()zwraca12 min leftlubexpired, gdy nie pozostał już żaden czas.paid()zwraca liczbę zapłaconych centów.
Użyj call. = FALSE. Dostarczony kod odczytuje stawkę, a następnie wiersze coin 20 lub wait 5 i po każdym z nich wyświetla status albo error: oraz komunikat. Na koniec wyświetla zapłaconą kwotę i próbuje zmienić rate w środowisku fabryki.
Twój kod umieść w pliku Meter.R. Plik main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Meter.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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 = "")
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy S3
Praca z plikamiListy z klasąFunkcje konstruktoraMetody print i formatWalidatory i funkcje pomocniczePowtórzenie — temperatury4Enkapsulacja w R
Domknięcia jako obiektyŚrodowiska jako obiektyFunkcje dostępoweOchrona stanuPodsumowanie – parkometr2Generics i metody S3
Generics i UseMethodMetody domyślneMetody dla podstawowych genericsPodstawy NextMethodPowtórzenie — pola figur5Klasy S4
Definiowanie klas S4Sloty i dostępSprawdzanie poprawnościMetody wyświetlaniaPodsumowanie – katalog produktów8Klasy referencyjne
Definiowanie klas referencyjnychMetody i aktualizacja pólSemantyka kopiowaniaDziedziczenie i callSuperPodsumowanie – kolejka zadań11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Dziedziczenie S3
Wektory klasKolejność wyszukiwania metodRozszerzanie za pomocą NextMethodSprawdzanie za pomocą inherits()Powtórzenie — lista płac pracownikówPoćwicz samodzielnie: Kompilator R online