2
我有一個關於參考類別的問題。我如何檢查字段分配。如何檢查參考類別中的字段分配
這裏我的示例代碼:
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
我的問題是我怎麼能阻止它,說:「測試$ firstValue < - 11」,而沒有設置檢查值。 在S4,我會解決這個問題是這樣的:
setGeneric(name = 'setFirstValue<-', def = function(object, value) {standardGeneric('setFirstValue<-')})
setReplaceMethod(
f = 'setFirstValue',
signature = 'A',
definition = function(object, value) {
[email protected] <- 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){ ... }
」將被放置。但我怎麼可以用參考類來解決這個問題?
感謝您的幫助。
我感謝你指出,我也可以使用validObject()。但正如你已經寫了,我不能阻止直接訪問。問題是,與「object @ slot < - 」相比,「object $ field < - 」與其他人使用得非常快。我認爲這應該改進。 – exitia 2013-03-18 08:50:13