Это зависит от того, насколько глубоко вы хотите go вникнуть в объяснение Tjebo. Для встроенных классов вызывается метод print.default
, который, в свою очередь, вызывает некоторый внутренний код C.
Внутренняя функция C, вызываемая в print.default
, определена здесь . Код C принимает объект R как объект SEXP
и решает, что с ним делать, проверяя его основной тип и используя оператор switch для определения формата печати на консоли с помощью метода C print sprintf
.
Это не тайна, поскольку вы можете легко проследить код, но, по сути, методы печати для базовых типов c определены в коде C, и вы не можете изменить их напрямую.
Однако это не мешает вам переопределить их, определив свои собственные методы печати для встроенных типов:
print.character <- function(x) cat("I print characters")
print("a")
#> I print characters
И вам не нужно соглашаться на печать по умолчанию атрибутов, et c, когда вы определяете новый класс:
x <- 1:5
class(x) <- c(class(x), "new")
print.new <- function(x) cat("My fancy new class prints like this:", x)
x
#> My fancy new class prints like this: 1 2 3 4 5