参照クラスについて質問があります。フィールドの割り当てを確認するにはどうすればよいですか。
ここに私のサンプルコードがあります:
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){ ... }
」が配置されます。しかし、参照クラスを使用してこれを解決するにはどうすればよいですか?
手伝ってくれてありがとう。