Статические методы в классах R6
Есть ли способ добавить статические методы в классы R6? Например, функция, которая может быть вызвана как
MyClass$method()
Вместо
myinstance <- MyClass$new()
myinstance$method()
2 ответа
Решение
Я не эксперт по R6, но поскольку каждый класс R6 является средой, вы можете добавить в нее все, что захотите.
Подобно:
MyClass$my_static_method <- function(x) { x + 2}
MyClass$my_static_method(1)
#[1] 3
Но метод не будет работать на экземпляре класса:
instance1 <- MyClass$new()
instance1$my_static_method(1)
# Error: attempt to apply non-function
Вы должны быть осторожны с существующими объектами в среде класса. Чтобы увидеть, что уже определено, используйте ls(MyClass)
Я использовал обходной путь для решения. Вы можете получить доступ к методам, не создавая экземпляр, вызвав MyClass$public_methods$my_static_method()
, Чтобы ограничить звонки без экземпляра, я сделал self
в качестве аргумента во всех методах.