使用锁定变量复制R5引用类

Mar*_*aph 5 r reference-class

我没有锁定其中一个字段时可以复制R5引用类,但如果其中一个字段被锁定则不会复制.示例代码如下(锁定调用已注释掉).我的问题:为什么我不能使用copy()方法复制带有锁定字段的实例?

example <- setRefClass('example',
    fields = list(
        count = 'numeric',
        data = 'data.frame', 
        d.accessor = function(x) {
            if ( !missing(x) ) 
                data <<- x
            else
                .self$data 
        }
    ),
    methods = list(
        initialize = function( data ) {
            if (!missing( data ))
                d.accessor <<- data
            count <<- 0
        },
        finalize = function()
            print('Bye Bye'),
        accumulate = function(x)
            count <<- count + x
    )
)

#example$lock('data') # write-1, read-many
instance <- example$new() # instantiation
df <- data.frame(x=1, y=2)# example df
instance$d.accessor <- df # 1st set - okay!
copyInst <- instance$copy()
Run Code Online (Sandbox Code Playgroud)

Kar*_*ner 1

这是因为复制实例时,字段数据会被赋值两次,这是禁止的。\n复制instance$data值到 时会先赋值copyInst$data,复制instance$d.accessor到时再赋值copyInst$d.accessor,因为d.accessor是 getter/setter,而按照您定义的方式,分配给它会导致分配给$data

\n\n

插图

\n\n
example$lock('data') # write-1, read-many\ninstance <- example$new() # instantiation\ndf <- data.frame(x=1, y=2)# example df\ninstance$data <- df # 1st assignement: OK\ninstance$d.accessor <- df #snd assignemnt: ERROR\nError: invalid replacement: reference class field \xe2\x80\x98data\xe2\x80\x99 is read-only\n
Run Code Online (Sandbox Code Playgroud)\n