Menu
Coddy logo textTech

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] 2

setMethod("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 
challenge icon

Görev

Kolay

Noktalar 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.R içinde: bir nokta, ardından yeni satır gelecek şekilde Point(1, 2) olarak yazdırılır.
  • Segment.R içinde: bir doğru parçası, uzunluğu iki ondalık basamağa yuvarlanmış olarak, ardından yeni satır gelecek şekilde Segment Point(1, 2) to Point(4, 6), length 5 olarak 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))
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online R derleyicisi