R-使用锁定变量复制R5参考类



我可以在没有锁定其中一个字段时复制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()

这是因为当您复制实例时,字段数据将被分配两次,这将被 lock lock 禁止。它将首先通过将 instance$data值复制到 copyInst$data中,然后在将instance$d.accessor复制到copyInst$d.accessor中,因为d.accessor是一个getter/setter,并且您定义它的方式,将其分配给它导致分配给$data

插图

example$lock('data') # write-1, read-many
instance <- example$new() # instantiation
df <- data.frame(x=1, y=2)# example df
instance$data <- df # 1st assignement: OK
instance$d.accessor <- df #snd assignemnt: ERROR
Error: invalid replacement: reference class field ‘data’ is read-only

最新更新