将
值断言为一个字段,如何使其他字段发生变化。
请考虑以下ReferenceClass
对象:
C<-setRefClass("C",
fields=list(a="numeric",b="numeric")
, methods=list(
seta = function(x){
a<<-x
b<<-x+10
cat("The change took place!")
}
) # end of the methods list
) # end of the class
现在创建类的实例
c<-C$new()
此命令
c$seta(10)
将导致 C$a 为 10,C$B 为 20。
所以它实际上有效,但是,我想通过命令实现此结果
c$a<-10
(即之后我希望 c$b 等于 seta() 函数逻辑中类中定义的 20)
我该怎么做?
我认为您正在寻找访问器函数,这些函数在?ReferenceClasses
中有详细描述。这应该有效:
C<-setRefClass("C",
fields=list(
a=function(v) {
if (missing(v)) return(x)
assign('x',v,.self)
b<<-v+10
cat ('The change took place!')
}
,b="numeric"
)
,methods=list(
initialize=function(...) {
assign('x',numeric(),.self)
.self$initFields(...)
}
)
)
c<-C$new()
c$a
# numeric(0)
c$a<-3
# The change took place!
c$b
# 13
c$a
# 3
它确实有一个副作用,即新值x
现在位于环境c
(类对象)中,但它对用户"隐藏",因为仅打印c
不会x
列为字段。