R6类中的静态方法

时间:2015-03-07 15:27:32

标签: r r6

有没有办法向R6类添加静态方法?例如,可以像

一样调用的函数
MyClass$method()

而不是

myinstance <- MyClass$new()
myinstance$method()

2 个答案:

答案 0 :(得分:10)

我不是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)

答案 1 :(得分:1)

我使用了解决方案的解决方法。您可以通过调用MyClass$public_methods$my_static_method()来访问方法而无需创建实例。 为了限制没有实例的调用,我在所有方法中都将self作为参数。