为一个字段分配值,如何更改其他字段。
考虑以下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)
我该怎么办?
答案 0 :(得分:3)
我认为您正在寻找访问者功能,这些功能在?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
列为字段。