Method show
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 25 dari 57.
Saat object S4 dicetak, R memanggil fungsi show(). Tanpa method untuk class tersebut, R mencantumkan setiap slot. Hasilnya benar, tetapi panjang:
setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
pOutput:
An object of class "Point"
Slot "x":
[1] 1
Slot "y":
[1] 2setMethod("show", "Point", function(object) ...) memberi class cara pencetakannya sendiri. Method ini mencetak dengan cat(), dan digunakan baik saat object dicetak di tingkat teratas maupun oleh 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)Output:
Point(1, 2)
Point(1, 2)Sebuah slot dapat menyimpan object S4 lain: nyatakan tipenya dengan nama class. Method show() dari object luar dapat mencetak object di dalamnya dengan memanggil show() pada object tersebut:
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))Output:
line (0, 0) -> (3, 4)class virtual, yang dideklarasikan dengan representation("VIRTUAL"), tidak dapat dibuat dengan new(). class ini berfungsi sebagai induk bersama bagi class lain, yang menjadi dasar bab Pewarisan S4. isVirtualClass() membedakan kedua jenis tersebut:
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")Output:
TRUE FALSE
cannot create a Shape Tantangan
MudahTitik dan segmen adalah dua class S4 dalam dua file. Class tersebut sudah dideklarasikan. Tambahkan method show() untuk keduanya:
- Di
Point.R: titik dicetak sebagaiPoint(1, 2)diikuti baris baru. - Di
Segment.R: segmen dicetak sebagaiSegment Point(1, 2) to Point(4, 6), length 5diikuti baris baru, dengan panjang dibulatkan hingga dua angka desimal. Buat sendiri teks titik atau gunakan helper; method titik mencetak baris barunya sendiri, jadi jangan panggil di tengah baris segmen.
Kode yang disediakan membaca baris 1,2 4,6, lalu mencetak titik pertama dan segmen, keduanya melalui method show().
Tulis kodemu di Point.R dan Segment.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Point.R")
source("Segment.R")
# Kode input/output yang disediakan: biarkan apa adanya
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))
}
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 BukuLatihan sendiri: Compiler R online