Как метод для нового класса может ссылаться на базовую функцию, которую он заменяет? - PullRequest
0 голосов
/ 22 ноября 2018

Предположим, я хочу создать метод для класса, который я создал, но у меня нет доступа к коду исходной функции - я просто хочу построить поверх него.Просто, чтобы привести простой пример, который на самом деле ничего не делает:

x1<-1
class(x1)<-c("myclass",class(x1))
print.myclass<-function(x) {
                            x<-paste0(x,"foobar")
                            print(x)
                           }
print(x1)

Если я пытаюсь запустить последнюю строку, она бросает функцию в цикл, и R в конце концов падает.Решение, которое я нашел, состояло в том, чтобы добавить в функцию строку, которая удаляет новое имя класса из x перед передачей его исходной функции:

print.myclass<-function(x) {x<-paste0(x,"foobar"); class(x)<-class(x)[-1]; print(x)}

Есть ли лучший / лучший способ сделать это

1 Ответ

0 голосов
/ 22 ноября 2018

Я думаю, что ваша проблема в том, что вы создаете бесконечный цикл: print(print(...).
Я не знаю, чего вы хотите достичь, но это может быть то, что вы ищете:

x1 <- 1
class(x1) <- c("myclass",class(x1))
print.myclass <- function(x) print.default(x)
print(x1)

Возможно, вы захотите посмотреть здесь

Кстати: я не думаю, что ваше решение действительно решает проблему.Вы просто удаляете новую запись класса, в результате чего print не использует print.myclass.

Подробнее см. Hadley

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...