method untuk Fitur Bawaan
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 28 dari 57.
setMethod() juga menambahkan method S4 ke fungsi dasar seperti length() dan summary(). Fungsi dasar tetap berfungsi untuk hal lainnya, dan class-mu memiliki perilakunya sendiri:
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)))Output:
[1] 3
[1] 2Operator juga merupakan generic. Sebuah method untuk + mencantumkan class pada kedua sisi dalam signature(). Kedua argumen disebut e1 dan e2:
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)Output:
6.50 generic grup Arith mewakili +, -, *, /, ^ dan operator lainnya sekaligus. Di dalam method-nya, callGeneric() mengulangi operator yang digunakan pada nilai yang kamu berikan:
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)Output:
30 2.5 9Generic grup Compare mencakup ==, <, > dan operator lainnya. Method-nya mengembalikan nilai logika yang dikembalikan callGeneric() untuk slot-slot tersebut:
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)Output:
TRUE FALSE FALSETantangan
MudahClass Money di Money.R memiliki slot amount (numeric) dan currency (character). Tambahkan empat method:
show()mencetak12.50 EURdan baris baru;+untuk dua objectMoneymengembalikan jumlahnya, atau berhenti dengancannot add EUR and USD(gunakancall. = FALSE) jika mata uangnya berbeda;*untukMoneydan sebuah angka mengembalikan nilai amount yang diskalakan;==untuk dua objectMoneybernilaiTRUEjika amount dan currency sama.
Kode yang disediakan membaca baris 10:EUR + 2.5:EUR, 4:USD * 3 atau 1:EUR == 1:EUR dan mencetak hasilnya atau error: beserta pesannya.
Tuliskan kodemu di Money.R. main.R berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
source("Money.R")
# Kode input/output yang disediakan: biarkan apa adanya
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 = ""))
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar S3
Bekerja dengan fileList dengan classFungsi KonstruktorMethod print dan formatValidator dan helperUlasan: Suhu4Enkapsulasi di R
Closure sebagai objectEnvironment sebagai objectFungsi accessorMelindungi stateRangkuman: Meter Parkir2S3 Generics dan Method
Generics dan UseMethodMethod DefaultMethod untuk Base GenericsDasar-Dasar NextMethodRekap: Luas Bangun5S4 class
Mendefinisikan class S4Slots dan AksesPemeriksaan ValiditasMethod showRingkasan: Katalog Produk8Kelas Referensi
Mendefinisikan Kelas ReferensiPembaruan method dan fieldSemantik PenyalinanPewarisan dan callSuperRangkuman: Antrean Tugas11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Pewarisan S3
Vektor classUrutan Pencarian methodMemperluas dengan NextMethodMemeriksa dengan inherits()Ulasan: Penggajian Staf6S4 Generik dan method
Membuat Generikmethod untuk Fitur BawaanDispatch Berdasarkan Dua ArgumensetValidity dan validObjectRangkuman: Uang dan Mata UangLatihan sendiri: Compiler R online