2012-10-28 16 views
5

के साथ आर 5 संदर्भ कक्षाओं की प्रतिलिपि बनाते समय मैं एक आर 5 संदर्भ वर्ग की प्रतिलिपि बना सकता हूं जब मैंने फ़ील्ड में से किसी एक को लॉक नहीं किया है, लेकिन यदि फ़ील्ड में से कोई एक लॉक है तो यह कॉपी नहीं करता है। उदाहरण कोड निम्नानुसार है (लॉक कॉल के साथ टिप्पणी की गई)। मेरा प्रश्न: कॉपी() विधि का उपयोग कर लॉक किए गए फ़ील्ड के साथ मैं उदाहरण की प्रतिलिपि क्यों नहीं बना सकता?लॉक वैरिएबल

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

उत्तर

1

यह है, क्योंकि जब आप उदाहरण की प्रतिलिपि, क्षेत्र डेटा आवंटित किया जाएगा दो बार, जो ताला से मना किया है। यह copyInst$data में instance$data मूल्य को कॉपी करके पहले सौंपा जाएगा, और दूसरा जब नकल copyInst$d.accessor में instance$d.accessor, क्योंकि d.accessor एक गेटर/सेटर, और जिस तरह से आप यह परिभाषित, बताए यह $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 
संबंधित मुद्दे