我得到以下错误,我认为这是因为解释器认为我调用函数.self$getFields
。
a<-A$new(var1=list(B$new(var1="a"),B$new(var1="b")))
a$test()
[1] Error in getFields(l, c("var1")) : unused argument (c("var1"))
AB.getFields<-function(keys){
vars<-mget(names(.refClassDef@fieldClasses), envir = attr(.self, ".xData"))
return(vars[keys])
}
B<-setRefClass(Class = "B"
,fields = list(var1 = "character")
,methods = list(getFields=AB.getFields
,initialize=function(...) {
usingMethods("getFields")
callSuper(...)
}
)
)
A<-setRefClass(Class = "A"
,fields = list(var1 = "list")
,methods = list(getFields=AB.getFields,
test=function() {
getFields(.self$var1,c("var1"))
}))
setGeneric("getFields", function(object, ...) standardGeneric("getFields"))
setMethod(getFields, "list", function(object, ...) lapply(object,function(e,...) e$getFields(...)))
答案 0 :(得分:1)
好的,正如您所怀疑的那样,问题是Ref类方法名称和泛型函数名称之间的冲突名称。
例如,这可以解决问题(在控制台中,可能不在包中):
A<-setRefClass(Class = "A"
,fields = list(var1 = "list")
,methods = list(getFields=AB.getFields,
test=function() {
fx <- get('getFields', 1)
fx(.self$var1,c("var1"))
}
)
)
在我看来,最好的方法是以不同的方式命名你的ref类方法。例如get_fields。