Show Metotları
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 25 / 57.
Bir S4 nesnesi yazdırıldığında R, show() işlevini çağırır. Sınıf için bir yöntem olmadığında, her yuva listelenir; bu doğrudur ancak uzundur:
setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
pÇıktı:
An object of class "Point"
Slot "x":
[1] 1
Slot "y":
[1] 2setMethod("show", "Point", function(object) ...) sınıfa kendine ait bir yazdırma biçimi kazandırır. Metot cat() ile yazdırır ve hem bir nesne en üst düzeyde yazdırıldığında hem de print() tarafından kullanılır:
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)Çıktı:
Point(1, 2)
Point(1, 2)Bir slot başka bir S4 nesnesi tutabilir: türünü sınıf adı olarak bildirin. Dıştaki show() yöntemi, içindeki nesne üzerinde show() çağırarak bu nesneyi yazdırabilir:
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))Çıktı:
line (0, 0) -> (3, 4)Sanal sınıf, representation("VIRTUAL") ile tanımlanır ve new() ile oluşturulamaz. S4 Kalıtım bölümünün temel aldığı diğer sınıflar için ortak bir üst sınıf olarak var olur. isVirtualClass() iki türü birbirinden ayırır:
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")Çıktı:
TRUE FALSE
cannot create a Shape Görev
KolayNoktalar ve doğru parçaları iki dosyadaki iki S4 sınıfıdır. Sınıflar tanımlanmıştır. Bunların show() yöntemlerini ekleyin:
Point.Riçinde: bir nokta, ardından yeni satır gelecek şekildePoint(1, 2)olarak yazdırılır.Segment.Riçinde: bir doğru parçası, uzunluğu iki ondalık basamağa yuvarlanmış olarak, ardından yeni satır gelecek şekildeSegment Point(1, 2) to Point(4, 6), length 5olarak yazdırılır. Nokta metnini kendiniz veya bir yardımcıyla oluşturun; nokta yöntemi kendi yeni satırını yazdırır, bu nedenle onu doğru parçasının satırının ortasında çağırmayın.
Sağlanan kod 1,2 4,6 satırlarını okur, önce ilk noktayı, ardından doğru parçasını kendi show() yöntemleri aracılığıyla yazdırır.
Kodunuz Point.R ve Segment.R içine gider. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Point.R")
source("Segment.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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))
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Tabanlı Programlama bölümündeki tüm dersler
1S3 Temelleri
Dosyalarla ÇalışmaSınıf ile ListelerYapıcı FonksiyonlarPrint ve Format MetotlarıDoğrulayıcılar ve YardımcılarTekrar - Sıcaklıklar4R'da Kapsülleme
Nesne Olarak Closure'larNesne Olarak OrtamlarErişimci FonksiyonlarDurumu KorumaÖzet - Parkmetre2S3 Generic'leri ve Metotları
Generic'ler ve UseMethodVarsayılan MetotlarTemel Generic'ler için MetotlarNextMethod TemelleriTekrar - Şekil Alanları5S4 Sınıfları
S4 Sınıflarını TanımlamaSlotlar ve ErişimGeçerlilik KontrolleriShow MetotlarıÖzet - Ürün Kataloğu8Referans Sınıfları
Referans Sınıflarını TanımlamaMetotlar ve Alan GüncellemeleriKopyalama SemantiğiKalıtım ve callSuperÖzet - Görev Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Online R derleyicisi