Metody wyświetlania
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 25 z 57.
Gdy wyświetlany jest obiekt S4, R wywołuje funkcję show(). Jeśli dla klasy nie ma metody, wyświetla wszystkie sloty, co jest poprawne, ale zajmuje dużo miejsca:
setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
pWynik:
An object of class "Point"
Slot "x":
[1] 1
Slot "y":
[1] 2setMethod("show", "Point", function(object) ...) nadaje klasie własny sposób wyświetlania. Metoda wyświetla dane za pomocą cat() i jest używana zarówno wtedy, gdy obiekt jest wyświetlany na najwyższym poziomie, jak i przez print():
setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) {
cat("Point(", object@x, ", ", object@y, ")\n", sep = "")
})
p <- new("Point", x = 1, y = 2)
p
print(p)Wynik:
Point(1, 2)
Point(1, 2)Slot może przechowywać inny obiekt S4: zadeklaruj jego typ jako nazwę klasy. Zewnętrzna metoda show() może wyświetlić obiekt wewnętrzny, wywołując na nim show():
setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) cat("(", object@x, ", ", object@y, ")", sep = ""))
setClass("Line", slots = c(from = "Point", to = "Point"))
setMethod("show", "Line", function(object) {
cat("line ")
show(object@from)
cat(" -> ")
show(object@to)
cat("\n")
})
new("Line", from = new("Point", x = 0, y = 0), to = new("Point", x = 3, y = 4))Wynik:
line (0, 0) -> (3, 4)Klasa wirtualna, deklarowana za pomocą representation("VIRTUAL"), nie może zostać utworzona za pomocą new(). Służy jako wspólna klasa nadrzędna dla innych klas, co stanowi podstawę rozdziału o dziedziczeniu S4. isVirtualClass() pozwala odróżnić te dwa rodzaje:
setClass("Shape", representation("VIRTUAL"))
setClass("Point", slots = c(x = "numeric"))
cat(isVirtualClass("Shape"), isVirtualClass("Point"), "\n")
msg <- tryCatch(new("Shape"), error = function(e) "cannot create a Shape")
cat(msg, "\n")Wynik:
TRUE FALSE
cannot create a Shape Wyzwanie
ŁatwyPunkty i odcinki to dwie klasy S4 w dwóch plikach. Klasy są już zadeklarowane. Dodaj ich metody show():
- W
Point.R: punkt jest wyświetlany jakoPoint(1, 2), po czym następuje znak nowej linii. - W
Segment.R: odcinek jest wyświetlany jakoSegment Point(1, 2) to Point(4, 6), length 5, po czym następuje znak nowej linii, a długość jest zaokrąglana do dwóch miejsc po przecinku. Utwórz tekst punktu samodzielnie lub za pomocą funkcji pomocniczej; metoda punktu wyświetla własny znak nowej linii, więc nie wywołuj jej w środku wiersza odcinka.
Dostarczony kod odczytuje wiersze 1,2 4,6, wyświetla pierwszy punkt, a następnie odcinek, oba za pomocą ich metod show().
Umieść swój kod w plikach Point.R i Segment.R. main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Point.R")
source("Segment.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
n <- as.numeric(strsplit(line, "[ ,]")[[1]])
a <- new("Point", x = n[1], y = n[2])
b <- new("Point", x = n[3], y = n[4])
print(a)
print(new("Segment", from = a, to = b))
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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