我有一个关于参考类的问题。如何检查字段分配。
这是我的示例代码:
rm(list=ls(all=TRUE))
setRefClass(
Class = "A",
fields = list(firstValue = "numeric"),
methods = list(
initialize = function(..., firstValue = numeric()) {
setFirstValue(firstValue)
},
getFirstValue = function() {
return(firstValue)
},
setFirstValue = function(value) {
if(length(value) != 0) {
if(value > 10) {
cat("only values lower 10 allowed!\n")
firstValue <<- 10
} else {
firstValue <<- value
}
} else {
firstValue <<- 0
}
}
)
)
test <- getRefClass("A")$new()
test$getFirstValue()
test$firstValue
test$setFirstValue(11)
test$firstValue
test$firstValue <- 11
test$firstValue
我的问题是如何防止它,设置“test$firstValue <- 11”而不检查值。在 S4 中,我会这样解决它:
setGeneric(name = 'setFirstValue<-', def = function(object, value) {standardGeneric('setFirstValue<-')})
setReplaceMethod(
f = 'setFirstValue',
signature = 'A',
definition = function(object, value) {
object@.firstValue <- value
validObject(object)
return(object)
}
)
and
setReplaceMethod(
f = "[",
signature = "A",
definition = function(x, i ,j , value) {
if(i == 'firstValue ' || i == 1) {setFirstValue(x) <- value}
return(x)
}
)
最后,在“A”的类定义中,“ validity = function(object){ ... }
”将被放置。但是我怎么能用参考类来解决这个问题呢?
感谢帮助。