Наследование ссылочного класса от внешнего пакета
Я пытаюсь переопределить метод ссылочного класса. Поскольку методы ссылочного класса привязаны к классу, а не к объекту, я считаю, что для этого мне нужно определить новый ссылочный класс, который наследуется от старого ссылочного класса. Однако класс, от которого я пытаюсь унаследовать, определен во внешнем пакете для моего (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"
в вашем классе.