如何使用引用类在R中的父类中设置字段?
我正在尝试设置如何使用引用类在R中的父类中设置字段?,r,reference-class,R,Reference Class,我正在尝试设置params字段并在Template类中验证它,因此我可以执行TemplateClass$new(params)并自动验证,但我得到一个错误: Template <- setRefClass('Template', fields = c( "params" ), methods = list( initialize = function(params){ params <<- para
params
字段并在Template类中验证它,因此我可以执行TemplateClass$new(params)
并自动验证,但我得到一个错误:
Template <- setRefClass('Template',
fields = c(
"params"
),
methods = list(
initialize = function(params){
params <<- params
validate_params()
},
validate_params = function(){
"everything okay"
}
)
)
PointsTemplate <- setRefClass('PointsTemplate',
contains = "Template",
methods = list(
initialize = function(params){
callSuper(params)
}
)
)
Error in .Object$initialize(...) :
argument "params" is missing, with no default
Template我对R参考类没有任何经验,但在参考类的帮助下,您可以阅读以下内容:
初始化方法在设计时需要谨慎,因为
他们为S4班做的。因此,您的方法通常应包括。。。作为
参数,所有其他参数应具有默认值或检查
missingness,并且您的方法应该通过
$callSuper()或$initFields(),如果您知道您的超类
没有初始化方法
所以我通过在父类中使用。。。并为所有具有默认值的字段命名参数
Template <- setRefClass('Template',
fields = list(params="list"),
methods = list(initialize =
function(...,params=list(1:5)){
callSuper(...,params=params)
validate_params()
},
validate_params = function(){
"everything okay"
}
)
)
仅供参考,每个班级都有一个超级班级。如果没有显式指定,则是基“envRefClass”。很好的例子。为什么没有消息“一切正常”
根据validate_params
函数?@DanielKrizian也许我应该添加“消息(“一切正常”)`
PointsTemplate <- setRefClass('PointsTemplate',
contains = "Template",
methods = list(initialize =
function(...){
callSuper(...)
}
))
## using default values
> PointsTemplate$new()
Reference class object of class "PointsTemplate"
Field "params":
[[1]]
[1] 1 2 3 4 5
## setting params
PointsTemplate$new(params=list(1:10))
Reference class object of class "PointsTemplate"
Field "params":
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10