13

有没有办法将静态方法添加到 R6 类?例如,可以像这样调用的函数

MyClass$method()

代替

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

2 回答 2

13

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

于 2015-03-07T22:15:30.043 回答
1

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

于 2018-03-21T21:19:22.777 回答