2012-10-28 21 views
5

Alanları biri tarafından kilitlenmediğimde bir R5 başvuru sınıfı kopyalayabilirim, ancak alanlardan biri kilitliyse kopyalama yapmaz. Örnek kod aşağıdaki gibidir (kilitli arama açıklandı). Soruma göre: Neden kopyası() yöntemini kullanarak kilitli bir alanla örnek kopyasını oluşturamıyorum? Eğer örneğini kopyaladığınızda, saha verileri kilit tarafından yasaklanmış iki kez, atanacak çünküKilitli bir değişkenle R5 başvuru sınıflarını kopyalama

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() 

cevap

1

öyle. Bu copyInst$data içine instance$data değerini kopyalayarak ilk atanır ve edecek ikinci zaman kopyalama copyInst$d.accessor içine instance$d.accessor, d.accessor bir alıcı/ayarlayıcı ve $data için atar sonuçlanır atama bunu tanımlanmış bir yol, çünkü.

Çizim:

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