NextMethod Temelleri
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 10 / 57.
Bir metodun içinde NextMethod(), aynı genel işlev için sıradaki metodu aynı bağımsız değişkenlerle çağırır. Tek sınıfa sahip bir nesne için sıradaki metot varsayılan olandır; bu nedenle bir metot genel yanıtı yeniden kullanıp ona ekleme yapabilir:
describe <- function(x) UseMethod("describe")
describe.default <- function(x) paste("an object with", length(x), "fields")
describe.task <- function(x) paste0(NextMethod(), ", titled ", x$title)
t <- structure(list(title = "Buy milk", done = FALSE), class = "task")
print(describe(t))Çıktı:
[1] "an object with 2 fields, titled Buy milk"Bir nesne, c("urgent", "task") gibi bir vektörde birden fazla sınıfa sahip olabilir. Gönderim bunları sırayla dener ve ilk yöntemdeki NextMethod(), bir sonraki sınıfın yöntemine geçer:
describe <- function(x) UseMethod("describe")
describe.task <- function(x) paste("task:", x$title)
describe.urgent <- function(x) paste("URGENT", NextMethod())
fix <- structure(list(title = "Fix the leak"), class = c("urgent", "task"))
print(describe(fix))Çıktı:
[1] "URGENT task: Fix the leak"NextMethod(), yöntemin aldığı her bağı, sep gibi ek bağımsız değişkenler de dâhil olmak üzere iletir. Bir sonraki yöntem, bunları yeniden listelemenize gerek kalmadan aynı değerleri görür:
label <- function(x, sep = ": ") UseMethod("label")
label.default <- function(x, sep = ": ") paste0("item", sep, x$name)
label.box <- function(x, sep = ": ") paste0("[", NextMethod(), "]")
b <- structure(list(name = "tools"), class = "box")
print(label(b))
print(label(b, sep = " = "))Çıktı:
[1] "[item: tools]"
[1] "[item = tools]"Base R, bir vektör alt kümelendiğinde sınıfı korumak için NextMethod() kullanır. Varsayılan [ sınıfı kaldırır; bu nedenle bir "[.percent" yöntemi işin yapılmasını sağlar ve sınıfı geri ekler:
format.percent <- function(x, ...) paste0(unclass(x) * 100, "%")
"[.percent" <- function(x, i) structure(NextMethod(), class = "percent")
p <- structure(c(0.1, 0.25, 0.5), class = "percent")
print(format(p[2:3]))Çıktı:
[1] "25%" "50%"Görev
KolayGörevler ve acil görevler, iki dosyada bulunan iki sınıftır. Task.R içinde genel describe() işlevini, an item döndüren varsayılan yöntemi ve NextMethod() çağırıp başlığı ekleyerek an item: Buy milk döndüren describe.task() işlevini tamamlayın. Urgent.R içinde, NextMethod() çağırarak URGENT an item: Fix bug döndüren describe.urgent() işlevini tamamlayın.
Yapıcılar verilmiştir: acil bir görev c("urgent", "task") sınıfına sahiptir. Verilen kod, task Buy milk, urgent Fix bug veya başlığı olan başka herhangi bir sözcük içeren satırları okur; bunlar ilgili sınıftan birer nesneye dönüşür ve her biri için describe() yazdırılır.
Kodunuz Task.R ve Urgent.R dosyalarına yazılmalıdır. main.R verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Task.R")
source("Urgent.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
kind <- sub(" .*", "", line)
title <- sub("^[a-z]+ ", "", line)
t <- if (kind == "urgent") new_urgent(title) else if (kind == "task") new_task(title) else structure(list(title = title), class = kind)
cat(describe(t), "\n", sep = "")
}
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