Наследование ссылочного класса от внешнего пакета

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

В частности, я пытаюсь наследовать от ссылочного класса DbDisconnector от dplyr и переопределить метод finalize.

Это правильно находит родительский класс, но затем не может присвоить ему, как это происходит из другого пакета.

NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = 'DbDisconnector',
  methods = list(
    finalize = function() {
      message("test")
    }
  ),
  where=getNamespace('dplyr')
)
# Error in assign(mname, def, where) (from file.r#75) :
#  cannot add bindings to a locked environment

Содержит методы, принимающие только строки, им нельзя просто дать определение refClass из getRefClass.

NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = getRefClass("DbDisconnector", getNamespace("dplyr")),
  methods = list(
    finalize = function() {
      message("test")
    }
  )
)
# Error in FUN(X[[1L]], ...) :
#  the 'contains' argument should be the names of superclasses:  got an element of class “name”

Я думаю, что это должно быть возможно, я просто не могу найти правильный способ сделать это.

1 ответ

Решение

Вы можете импортировать суперкласс в свою среду:

DbDisconnector <- getFromNamespace("DbDisconnector", "dplyr")

А затем установить contains = "DbDisconnector" в вашем классе.

Другие вопросы по тегам