2012-05-25 22 views
10

कक्षाओं को परिभाषित करते समय, क्या आर निजी बनाम सार्वजनिक स्लॉट की कोई धारणा है?आर में सार्वजनिक और निजी स्लॉट?

यदि भाषा में इसके लिए कोई सख्त सुविधा नहीं है, तो क्या एक आम नामकरण योजना है?

उत्तर

14

संपादित करें:

इतिहास का एक सा देने के लिए: में setClass एक विकल्प 'पहुंच' से काम तथाकथित 'विशेषाधिकार प्राप्त स्लॉट' है कि केवल getters और setters वर्ग के साथ प्रदान की के माध्यम से पहुँचा जा सकता है बनाने के लिए प्रदान किया गया । यह निजी स्लॉट (गेटटर प्रदान नहीं करके) बनाने की अनुमति देगा, लेकिन यह सुविधा कभी लागू नहीं हुई है। ?setClass की मदद पृष्ठ वर्तमान में पढ़ता है:

का उपयोग और संस्करण, एस प्लस के साथ संगतता के लिए शामिल है, लेकिन अभी ध्यान नहीं दिया।


तो, @ अंकन के माध्यम से के रूप में हर स्लॉट पहुंचा जा सकता है निजी और सार्वजनिक स्थान के रूप में ऐसी कोई बात नहीं है। और व्यक्तिगत रूप से मैं उससे बहुत खुश हूं, क्योंकि यह मुझे उन वस्तुओं से जानकारी का उपयोग करने की अनुमति देता है जो पैकेज में शामिल गेटर्स और सेटर्स का उपयोग करके आसानी से पहुंच योग्य नहीं हैं। यह मुझे गेटर्स और सेटर्स द्वारा बनाए गए ओवरहेड से बचकर भारी गणना का अर्थ भी देता है।

मुझे सार्वजनिक और "निजी" स्लॉट के बीच भेद बनाने के लिए किसी भी नामकरण सम्मेलन से अवगत नहीं है। आप डॉट के साथ "निजी" स्लॉट से पहले अपने लिए भेद कर सकते हैं, लेकिन इसका कोई प्रभाव नहीं पड़ता कि स्लॉट कैसे व्यवहार करते हैं। यह सामान्य अभ्यास भी नहीं है, क्योंकि अधिकांश आर प्रोग्रामर सार्वजनिक और निजी स्लॉट की परवाह नहीं करते हैं। वे स्लॉट्स के लिए गेटर्स और सेटर्स प्रदान नहीं करते हैं कि औसत उपयोगकर्ता तक नहीं पहुंचना चाहिए।

एक मामूली उदाहरण देने के लिए: निम्नलिखित दो स्लॉट वाली कक्षा बनाता है, और केवल एक स्लॉट के लिए गेटटर और सेटर बनाता है।

setClass("Example", 
    representation(
    aslot = "numeric", 
    .ahiddenslot = "character" 
) 
) 

setGeneric("aslot", function(x) standardGeneric("aslot")) 

setMethod("aslot","Example",function(x){ 
    [email protected] 
}) 

setGeneric("aslot<-", function(x,value) standardGeneric("aslot<-")) 

setMethod("aslot<-","Example",function(x,value){ 
    [email protected] <- value 
    x 
}) 

तुम भी एक show विधि है कि बस छिपा स्लॉट प्रिंट आउट नहीं है निर्धारित कर सकते हैं:

> X <- new("Example",aslot=1,.ahiddenslot="b") 
> X 
Example with value for aslot: 1 
> aslot(X) 
[1] 1 
> aslot(X) <- 3 

लेकिन .ahiddenslot:

setMethod("show","Example",function(object){ 
    cat("Example with value for aslot: ", [email protected],"\n") 
}) 

यह निम्न सामान्य उपयोग देता है अभी भी पहुंच योग्य है:

> slot(X,".ahiddenslot") 
[1] "b" 
+1

टी उन्होंने एक "।" के सम्मेलन का नामकरण किया। समझ में आता है, क्योंकि ज्यादातर मुझे लगता है कि यह मुझे भेदभाव करके सीधे मेरे इरादे के मामले में चीजों को रखने में मदद करेगा। अगर वे सुरक्षित हैं तो मुझे वास्तव में परवाह नहीं है। –

संबंधित मुद्दे