R:更改字段(槽)将值分配给一些其他字段中的类的值(R: Change the fields'

2019-09-19 03:34发布

Assgning值到一个领域,我怎样才能使其他领域发生变化。

考虑以下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键等于20如在类中刚毛()函数的逻辑定义)
我该怎么做?

Answer 1:

我认为你正在寻找的存取功能 ,在详细描述?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作为一个字段。



文章来源: R: Change the fields' (slots') values of the class assigning a value to some other field