Статические методы в классах 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 в качестве аргумента во всех методах.

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