Yerleşik İşlevler için Metotlar
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 28 / 57.
setMethod() ayrıca length() ve summary() gibi temel işlevlere S4 yöntemleri ekler. Temel işlev diğer her şey için çalışmaya devam eder ve sınıfınız kendine özgü davranışa sahip olur:
setClass("Playlist", slots = c(name = "character", songs = "character"))
setMethod("length", "Playlist", function(x) length(x@songs))
pl <- new("Playlist", name = "gym", songs = c("a", "b", "c"))
print(length(pl))
print(length(c(1, 2)))Çıktı:
[1] 3
[1] 2Operatörler de generic'tir. + için bir metot, bir signature() içinde her iki tarafın sınıflarını belirtir. İki argümana e1 ve e2 adları verilir:
setClass("Money", slots = c(amount = "numeric"))
setMethod("show", "Money", function(object) cat(sprintf("%.2f", object@amount), "\n"))
setMethod("+", signature("Money", "Money"), function(e1, e2) {
new("Money", amount = e1@amount + e2@amount)
})
new("Money", amount = 2.5) + new("Money", amount = 4)Çıktı:
6.50 grup generic Arith, +, -, *, /, ^ ve geri kalanların tümünü aynı anda temsil eder. Metodunun içinde callGeneric(), geçirdiğiniz değerler üzerinde hangi operatör kullanıldıysa onu tekrarlar:
setClass("Money", slots = c(amount = "numeric"))
setMethod("Arith", signature("Money", "numeric"), function(e1, e2) {
new("Money", amount = callGeneric(e1@amount, e2))
})
m <- new("Money", amount = 10)
cat((m * 3)@amount, (m / 4)@amount, (m - 1)@amount)Çıktı:
30 2.5 9Compare grup geneli, ==, <, > ve diğerlerini kapsar. Yöntemi, yuvalar için callGeneric() tarafından döndürülen değeri, mantıksal bir değeri döndürür:
setClass("Money", slots = c(amount = "numeric"))
setMethod("Compare", signature("Money", "Money"), function(e1, e2) {
callGeneric(e1@amount, e2@amount)
})
a <- new("Money", amount = 5)
b <- new("Money", amount = 8)
cat(a < b, a == b, a >= b)Çıktı:
TRUE FALSE FALSEGörev
KolayMoney sınıfı Money.R içinde amount (sayısal) ve currency (karakter) yuvalarına sahiptir. Dört yöntem ekleyin:
show(),12.50 EURve yeni bir satır yazdırır;- iki
Moneynesnesi için+, toplamlarını döndürür veya para birimleri farklı olduğundacannot add EUR and USDile durur (call. = FALSEkullanın); Moneyve bir sayı için*, ölçeklendirilmiş tutarı döndürür;- iki
Moneynesnesi için==, tutar ve para biriminin ikisi de eşit olduğundaTRUEolur.
Sağlanan kod 10:EUR + 2.5:EUR, 4:USD * 3 veya 1:EUR == 1:EUR satırlarını okur ve sonucu ya da error: iletisini yazdırır.
Kodunuz Money.R dosyasına gider. main.R sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Money.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
parse_money <- function(t) {
p <- strsplit(t, ":")[[1]]
new("Money", amount = as.numeric(p[1]), currency = p[2])
}
for (line in input) {
p <- strsplit(line, " ")[[1]]
a <- parse_money(p[1])
tryCatch({
if (p[2] == "+") print(a + parse_money(p[3]))
if (p[2] == "*") print(a * as.numeric(p[3]))
if (p[2] == "==") cat(a == parse_money(p[3]), "\n", sep = "")
}, error = function(e) cat("error: ", conditionMessage(e), "\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ç Alma3S3 Kalıtımı
Sınıf VektörleriMetot Arama SırasıNextMethod ile Genişletmeinherits() ile DenetlemeÖzet - Personel Bordrosu6S4 Generic'leri ve Metotlar
Generic'ler OluşturmaYerleşik İşlevler için Metotlarİki Argümana Göre GönderimsetValidity ve validObjectÖzet - Para ve Para BirimiKendi başına pratik yap: Online R derleyicisi