考虑以下 R 代码:
MyClass <- setRefClass("MyClass",
fields = list(
),
methods = list(
initialize = function(x){
#give new attribute x
}
)
)
my_var_name <- 1
obj <- MyClass$new(x = my_var_name)
我想为
MyClass
添加一个属性。该属性的名称为 my_var_name
,由用户输入指定。需要通过 obj$my_var_name
访问的属性值应等于变量的值,在本例中为 1
。如果这样的事情一般很难做到,我希望至少在构造函数中完成。属性的 class
(在本例中为 numeric
)可以视为已知。
我知道
deparse(substitute())
可以用来提取变量名。但是我如何使用它来定义属性呢?
如果您想要动态构造类,那么引用类不是正确的 OO 系统。 要使用参考类来执行此操作,请定义一个子类。
MyClass <- setRefClass("MyClass",
fields = list(),
methods = list(initialize = function(x) {})
)
MyChild <- setRefClass("MyChild", contains = "MyClass",
fields = list(a = "numeric"),
methods = list(initialize = function(x) a <<- 1)
)
obj <- MyChild(1)
obj$a
## [1] 1